Req #42351 [Com]: Unable to create dates with years <= -10000 and >= 10000

From: Date: Wed, 20 Feb 2019 21:36:12 +0000
Subject: Req #42351 [Com]: Unable to create dates with years <= -10000 and >= 10000
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-219665@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=42351&edit=1 ID: 42351 Comment by: icyd3mon at gmail dot com Reported by: mattsch at gmail dot com Summary: Unable to create dates with years <= -10000 and >= 10000 Status: Open Type: Feature/Change Request Package: Date/time related Operating System: Gentoo Linux 13.0 PHP Version: 5.6.4 Block user comment: N Private report: N New Comment: This still persists in PHP 7.2.9. I think the perpetrator lies in https://github.com/php/php-src/blob/653e47da1690ee91fb62488944d43cf70cbbd0a8/ext/date/lib/parse_date.c#L25252 Where it is assumed that the maximum length of year is four digits. Effectively, it could be 8 digits, since <?php $date = new \DateTime('@'.PHP_INT_MAX); echo $date->format('c'); ?> returns "219250468-12-04T15:30:07+00:00" Previous Comments: ------------------------------------------------------------------------ [2014-12-30 15:13:15] mattsch at gmail dot com fixed summary ------------------------------------------------------------------------ [2014-12-30 15:12:30] mattsch at gmail dot com I wasn't able to change the status to re-opened. Please reopen. ------------------------------------------------------------------------ [2014-12-30 15:11:25] mattsch at gmail dot com What are you talking about? I've given you all the information you need to reproduce the bug and the reason why it's a bug. Why are you closing this case? Note that I just retested with the latest version of php and it is still not fixed yet. ------------------------------------------------------------------------ [2014-12-30 10:41:28] php-bugs at lists dot php dot net No feedback was provided. The bug is being suspended because we assume that you are no longer experiencing the problem. If this is not the case and you are able to provide the information that was requested earlier, please do so and change the status of the bug back to "Re-Opened". Thank you. ------------------------------------------------------------------------ [2014-01-26 03:44:44] mattsch at gmail dot com Well if you didn't delete my original message, you wouldn't be changing the status to feedback eh? Funny enough, my original message was preserved when your system sent me an email saying you don't have enough information. As originally stated, ISO dates should support years in this range and such years are used by astronomers. ------------------------------------------------------------------------ [2007-08-20 16:17:31] mattsch at gmail dot com Description: ------------ I am unable to create dates with years <= -10000 and >= 10000. ISO 8601:2004E allows for this under Expanded representations: http://isotc.iso.org/livelink/livelink/4021199/ISO_8601_2004_E.zip?func=doc.Fetch&nodeid=4021199 ISO 8601:2004(E) 14 © ISO 2004 – All rights reserved 4.1.2.4 Expanded representations If, by agreement, expanded representations are used, the formats shall be as specified below. The interchange parties shall agree the additional number of digits in the time element year. In the examples below it has been agreed to expand the time element year with two digits. a) A specific day Basic format: ±YYYYYMMDD Example: +0019850412 Extended format: ±YYYYY-MM-DD Example: +001985-04-12 b) A specific month Basic format: ±YYYYY-MM Example: +001985-04 Extended format: not applicable c) A specific year Basic format: ±YYYYY Example: +001985 Extended format: not applicable d) A specific century Basic format: ±YYY Example: +0019 Extended format: not applicable Reproduce code: --------------- Negative year: <?php $date = new DateTime('-10000-01-01 00:00:00'); echo $date->format('Y-m-d H:i:s'); ?> Positive year: <?php $date = new DateTime('10000-01-01 00:00:00'); echo $date->format('Y-m-d H:i:s'); ?> Expected result: ---------------- Negative year outputs: -10000-01-01 00:00:00 Positive year outputs: 10000-01-01 00:00:00 Actual result: -------------- Negative year outputs: 2000-01-01 00:00:00 Positive year outputs: Fatal error: Uncaught exception 'Exception' with message 'DateTime::__construct(): Failed to parse time string (10000-01-01 00:00:00) at position 12 (0): Double time specification' in /test.php:5 Stack trace: #0 /test.php(5): DateTime->__construct('10000-01-01 00:...') #1 {main} thrown in /test.php on line 5 ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at https://bugs.php.net/bug.php?id=42351 -- Edit this bug report at https://bugs.php.net/bug.php?id=42351&edit=1

« previous php.bugs (#219665) next »