Bug #79716 [Opn->Ver]: Invalid date time created (with day "00")
| From: | cmb@php.net | Date: | Fri, 19 Jun 2020 14:14:49 +0000 |
| Subject: | Bug #79716 [Opn->Ver]: Invalid date time created (with day "00") | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-227557@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: cmb@php.net
Reported by: a dot schilder at gmx dot de
Summary: Invalid date time created (with day "00")
-Status: Open
+Status: Verified
Type: Bug
Package: Date/time related
-Operating System: Windows 10
+Operating System: Windows, Linux
PHP Version: 7.4.7
Block user comment: N
Private report: N
New Comment:
Confirmed: <https://3v4l.org/nA0p0>. Doesn't seem
to be Windows specific.
Previous Comments:
------------------------------------------------------------------------
[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