Bug #78499 [Opn->Dup]: [7.2.0+] DateTime on certain dates

From: Date: Thu, 05 Sep 2019 22:12:03 +0000
Subject: Bug #78499 [Opn->Dup]: [7.2.0+] DateTime on certain dates
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-222580@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=78499&edit=1 ID: 78499 Updated by: requinix@php.net Reported by: alexanderpas at gmail dot com Summary: [7.2.0+] DateTime on certain dates -Status: Open +Status: Duplicate Type: Bug Package: Date/time related Operating System: Any PHP Version: 7.4.0RC1 Block user comment: N Private report: N New Comment: Smells like bug #78496. Previous Comments: ------------------------------------------------------------------------ [2019-09-05 22:06:15] alexanderpas at gmail dot com Description: ------------ When creating a DateTime object using a unix timestamp, the resulting DateTime object does not represent the same timestamp as it was created with. Test script: --------------- <?php $tests[] = '0000-01-28 00:00:00 UTC'; $tests[] = '0000-01-29 00:00:00 UTC'; $tests[] = '0000-01-30 00:00:00 UTC'; $tests[] = '0000-01-31 00:00:00 UTC'; $tests[] = '0000-02-01 00:00:00 UTC'; $tests[] = '0000-02-27 00:00:00 UTC'; $tests[] = '0000-02-28 00:00:00 UTC'; $tests[] = '0000-02-29 00:00:00 UTC'; $tests[] = '0000-02-30 00:00:00 UTC'; // intentionally invalid day, should be the same as the next. $tests[] = '0000-03-01 00:00:00 UTC'; $tests[] = '0000-03-02 00:00:00 UTC'; foreach ($tests as $test) { $timestamp1 = strtotime($test); $date_time = new DateTime('@' . $timestamp1); $timestamp2 = $date_time->getTimestamp(); print $timestamp1 . "\n"; print $timestamp2 . "\n"; if ($timestamp1 != $timestamp2) { print "timestamps are not equal\n"; } print_r($date_time); print "\n"; } Expected result: ---------------- -62164886400 -62164886400 DateTime Object ( [date] => 0000-01-28 00:00:00.000000 [timezone_type] => 1 [timezone] => +00:00 ) -62164800000 -62164800000 DateTime Object ( [date] => 0000-01-29 00:00:00.000000 [timezone_type] => 1 [timezone] => +00:00 ) -62164713600 -62164713600 DateTime Object ( [date] => 0000-01-30 00:00:00.000000 [timezone_type] => 1 [timezone] => +00:00 ) -62164627200 -62164627200 DateTime Object ( [date] => 0000-01-31 00:00:00.000000 [timezone_type] => 1 [timezone] => +00:00 ) -62164540800 -62164540800 DateTime Object ( [date] => 0000-02-01 00:00:00.000000 [timezone_type] => 1 [timezone] => +00:00 ) -62162294400 -62162294400 DateTime Object ( [date] => 0000-02-27 00:00:00.000000 [timezone_type] => 1 [timezone] => +00:00 ) -62162208000 -62162208000 DateTime Object ( [date] => 0000-02-28 00:00:00.000000 [timezone_type] => 1 [timezone] => +00:00 ) -62162121600 -62162121600 DateTime Object ( [date] => 0000-02-29 00:00:00.000000 [timezone_type] => 1 [timezone] => +00:00 ) -62162035200 -62162035200 DateTime Object ( [date] => 0000-03-01 00:00:00.000000 [timezone_type] => 1 [timezone] => +00:00 ) -62162035200 -62162035200 DateTime Object ( [date] => 0000-03-01 00:00:00.000000 [timezone_type] => 1 [timezone] => +00:00 ) -62161948800 -62161948800 DateTime Object ( [date] => 0000-03-02 00:00:00.000000 [timezone_type] => 1 [timezone] => +00:00 ) Actual result: -------------- -62164886400 -62164886400 DateTime Object ( [date] => 0000-01-28 00:00:00.000000 [timezone_type] => 1 [timezone] => +00:00 ) -62164800000 -62164800000 DateTime Object ( [date] => 0000-01-29 00:00:00.000000 [timezone_type] => 1 [timezone] => +00:00 ) -62164713600 -62164800000 timestamps are not equal DateTime Object ( [date] => 0000-01-29 00:00:00.000000 [timezone_type] => 1 [timezone] => +00:00 ) -62164627200 -62164713600 timestamps are not equal DateTime Object ( [date] => 0000-01-30 00:00:00.000000 [timezone_type] => 1 [timezone] => +00:00 ) -62164540800 -62164627200 timestamps are not equal DateTime Object ( [date] => 0000-01-31 00:00:00.000000 [timezone_type] => 1 [timezone] => +00:00 ) -62162294400 -62162380800 timestamps are not equal DateTime Object ( [date] => 0000-02-26 00:00:00.000000 [timezone_type] => 1 [timezone] => +00:00 ) -62162208000 -62162294400 timestamps are not equal DateTime Object ( [date] => 0000-02-27 00:00:00.000000 [timezone_type] => 1 [timezone] => +00:00 ) -62162121600 -62162208000 timestamps are not equal DateTime Object ( [date] => 0000-02-28 00:00:00.000000 [timezone_type] => 1 [timezone] => +00:00 ) -62162035200 -62162035200 DateTime Object ( [date] => 0000-03-01 00:00:00.000000 [timezone_type] => 1 [timezone] => +00:00 ) -62162035200 -62162035200 DateTime Object ( [date] => 0000-03-01 00:00:00.000000 [timezone_type] => 1 [timezone] => +00:00 ) -62161948800 -62161948800 DateTime Object ( [date] => 0000-03-02 00:00:00.000000 [timezone_type] => 1 [timezone] => +00:00 ) ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=78499&edit=1

« previous php.bugs (#222580) next »