Bug #79716 [Ver->Csd]: Invalid date time created (with day "00")
| From: | derick@php.net | 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