Bug #79716 [Com]: Invalid date time created (with day "00")
| From: | a dot schilder at gmx dot de | 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