Bug #79716 [Com]: Invalid date time created (with day "00")

From: Date: Sat, 20 Jun 2020 10:12:53 +0000
Subject: Bug #79716 [Com]: Invalid date time created (with day "00")
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-227563@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 Comment by: a dot schilder at gmx dot de Reported by: a dot schilder at gmx dot de Summary: Invalid date time created (with day "00") Status: Verified Type: Bug Package: Date/time related Operating System: Windows, Linux PHP Version: 7.4.7 Block user comment: N Private report: N New Comment: 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" } Previous Comments: ------------------------------------------------------------------------ [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 (#227563) next »