Bug #66294 [Com]: Timezone display and Timestamps are incorrect when using GMT+/- timezones
[email protected] ("krossiter at dlvr dot it")
| Newsgroups | php.bugs |
|---|---|
| Message-ID | <[email protected]> |
Edit report at https://bugs.php.net/bug.php?id=66294&edit=1
ID: 66294
Comment by: krossiter at dlvr dot it
Reported by: jrossiter at dlvr dot it
Summary: Timezone display and Timestamps are incorrect when
using GMT+/- timezones
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:
There was no such proscription at the time the bug was filed.
Also, since these are valid timezones, they should be operating as expected. The user cannot always define what format they receive timezone strings in, and being required to add significant special-case handling of the Etc/UTC timezones is ridiculous.
Previous Comments:
------------------------------------------------------------------------
[2017-03-19 11:27:37] [email protected]
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!
------------------------------------------------------------------------
[2015-09-08 14:47:44] [email protected]
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