Bug #79716 [Ver->Csd]: Invalid date time created (with day "00")

From: Date: Tue, 06 Apr 2021 19:56:43 +0000
Subject: Bug #79716 [Ver->Csd]: Invalid date time created (with day "00")
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-233267@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=79716&edit=1 ID: 79716 Updated by: derick@php.net Reported by: a dot schilder at gmx dot de Summary: Invalid date time created (with day "00") -Status: Verified +Status: Closed Type: Bug Package: Date/time related Operating System: Windows, Linux PHP Version: 7.4.7 -Assigned To: +Assigned To: derick Block user comment: N Private report: N New Comment: The fix for this bug has been committed. If you are still experiencing this bug, try to check out latest source from https://github.com/php/php-src and re-test. Thank you for the report, and for helping us make PHP better. Fixed for PHP 8.1. Previous Comments: ------------------------------------------------------------------------ [2020-06-20 10:12:53] a dot schilder at gmx dot de In the meantime I could reproduce it using a date interval. Script: <?php $datetime = new DateTimeImmutable('2768-12-31 15:00:00.000000', new \DateTimeZone('UTC')); $datetime = $datetime->add(new \DateInterval('P1Y')); var_dump($datetime); Result: object(DateTimeImmutable)#4 (3) { ["date"]=> string(26) "2770-01-00 15:00:00.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC" } ------------------------------------------------------------------------ [2020-06-19 14:14:48] cmb@php.net Confirmed: <https://3v4l.org/nA0p0>. Doesn't seem to be Windows specific. ------------------------------------------------------------------------ [2020-06-19 13:07:15] a dot schilder at gmx dot de Description: ------------ Situation: I'm doing some datetiem calculations. I have a start date time and calculate following dates based on recurrence rules. This means I add date intervals to the start date time value until a specific date time or number of results. Depending on the rule the date can be hundreds oy years in the future. Error: From time to time I got an error when trying to get the number of days in month of the resulting date time. The value I got was "0" (which isn't documented, because it shouldn't be possible). When I dum the object, the internal date time value is set to the invalid date "2770-01-00 15:00:00.000000". I can't say how it came to the result, because there were too many date intervals added to the start date time, but it's easy to reproduced by creating a date time instance directly with this wrong time value. Reproduced in the following PHP Versions: 7.2.2, 7.4.2, 7.4.7, 8.0.0-dev Test script: --------------- <?php $datetime = new \DateTimeImmutable( '2770-01-00 15:00:00.000000', new \DateTimeZone('UTC') ); \var_dump($datetime->format('j') === '0'); \var_dump($datetime); Expected result: ---------------- bool(false) object(DateTimeImmutable)#3 (3) { ["date"]=> string(26) "2769-12-31 15:00:00.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC" } Actual result: -------------- bool(true) object(DateTimeImmutable)#3 (3) { ["date"]=> string(26) "2770-01-00 15:00:00.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC" } ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=79716&edit=1

« previous php.bugs (#233267) next »