Bug #66294 [Opn->Wfx]: Timezone display and Timestamps are incorrect when using GMT+/- timezones

From: Date: Sun, 19 Mar 2017 11:27:38 +0000
Subject: Bug #66294 [Opn->Wfx]: Timezone display and Timestamps are incorrect when using GMT+/- timezones
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-207947@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=66294&edit=1 ID: 66294 Updated by: heiglandreas@php.net Reported by: jrossiter at dlvr dot it Summary: Timezone display and Timestamps are incorrect when using GMT+/- timezones -Status: Open +Status: Wont fix Type: Bug Package: Date/time related Operating System: Ubuntu 13.04 PHP Version: 5.5.7 Block user comment: N Private report: N New Comment: As already pointed out, you are advised to *not* use the GMT-Timezone identifiers as stated at http://www.php.net/manual/en/timezones.others.php. Therefore we won't fix this issue! Previous Comments: ------------------------------------------------------------------------ [2015-09-08 14:47:44] cmb@php.net Confirmed: <https://3v4l.org/RCA06>. However, the manual strongly advises against using the Etc/GMT* timezones[1], so I suppose that this issue won't be fixed. [1] <http://www.php.net/manual/en/timezones.others.php> ------------------------------------------------------------------------ [2013-12-14 07:18:28] jrossiter at dlvr dot it Description: ------------ Creating a new DateTime object using a fixed string with a "GMT(+/-)nn" timezone (e.g. "GMT+12" or "GMT-10") results in the correct date and time being displayed, with but a badly formatted timezone ("GMT+1200", "GMT-1000") (A note if the reader isn't aware... the Etc/GMT timezones actually perform the opposite of what they appear to be requesting. GMT+12 is actually GMT minus 12 hours, and GMT-10 is actually GMT plus 10 hours) The unix timestamp returned by this object is incorrect by 2*offset. So, the GMT+12 returns a timestamp decremented 24 hours. The GMT-10 returns a date/time incremented by 20 hours. Creating a new DateTime object and passing in a DateTimeZone object using an Etc/GMT(+/-)nn (e.g. "Etc/GMT+12") timezone displays timestamps and formatted timezone as expected. Test script: --------------- foreach (['Etc/GMT+12', 'Etc/GMT-10'] as $timezone) { $dTZ = new DateTimeZone($timezone); // Create a DateTime using the DateTimeZone object // This will display both formatted and unix timestamp as expected $dT = new DateTime('2013-12-13 18:49:00', $dTZ); echo $dT->format('Y-m-d H:i:s T'), PHP_EOL; echo $dT->getTimestamp(), PHP_EOL; // Create a DateTime using only a string representation // This will display the formatted date/time as expected, // but with the incorrect timezone // The value returned by getTimestamp() for format('U') will // be off by 2*offset $dT2 = new DateTime($dT->format('Y-m-d H:i:s T')); echo $dT2->format('Y-m-d H:i:s T'), PHP_EOL; echo $dT2->getTimestamp(), PHP_EOL, PHP_EOL; } Expected result: ---------------- 2013-12-13 18:49:00 GMT+12 1387003740 2013-12-13 18:49:00 GMT+12 1387003740 2013-12-13 18:49:00 GMT-10 1386924540 2013-12-13 18:49:00 GMT-10 1386924540 Actual result: -------------- 2013-12-13 18:49:00 GMT+12 1387003740 2013-12-13 18:49:00 GMT+1200 1386917340 2013-12-13 18:49:00 GMT-10 1386924540 2013-12-13 18:49:00 GMT-1000 1386996540 ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=66294&edit=1

« previous php.bugs (#207947) next »