PHP 时区 +/- 问题


Php Timezone +/- Issue

 <?php 
    $ctime = time();
    print date("d-m-Y, g:i A", $ctime) . "  (+0)<br>";
    date_default_timezone_set('Etc/GMT+8');
    print date("d-m-Y, g:i A", $ctime) . "  (+8)<br>";
    date_default_timezone_set('Etc/GMT-8');
    print date("d-m-Y, g:i A", $ctime) . "  (-8)<br>";
 ?>

所以正如你在上面看到的,我弄乱了时区。代码按预期工作并输出 3 个值。

26-11-2013, 9:10 PM (+0)
26-11-2013, 1:10 PM (+8)
27-11-2013, 5:10 AM (-8)

我的问题与脚本本身无关,时区很好地呈现,除了一个问题。时区似乎有点不对劲。我要指出的部分是 +8/-8 由于某种原因它是相反的。我住在 PST(-8( 中,当输出时区时,它们给出相反的结果,所以当我将时区设置为 +8 时,我真的得到 -8,反之亦然。因为即使它是+8,它也与我的时间完美匹配。我做错了什么还是完全没问题,我只是对任何事情感到困惑?

Etc/GMT时区的符号颠倒了,实际上行为与您的预期相反。另见维基百科:

为了符合POSIX风格,那些以"Etc/GMT"开头的区域名称的符号与大多数人的期望相反。在这种风格中,格林威治标准时间以西的区域有一个正号,而东部的区域的名称中有一个负号(例如"Etc/GMT-14"比格林威治标准时间以东早 14 小时/以东(。

此外,尽量避免这些,基于位置的时区可以考虑 DST,Etc/GMT不这样做 AFAIK。

我看到手册还警告你:

警告

请不要使用此处列出的任何时区(UTC 除外(,它们仅出于向后兼容的原因而存在。