Php 菲律宾、新加坡和+的新加坡时区问题;08:00提供不同的答案

Php 菲律宾、新加坡和+的新加坡时区问题;08:00提供不同的答案,php,datetime,timezone,strtotime,Php,Datetime,Timezone,Strtotime,返回2014-06-26 06:30:00 当 echo date('Y-m-d H:i:s', strtotime("2014-06-26 12:00:00 SGT")); 返回正确答案-2014-06-26 06:00:00 在 有人知道为什么吗 我在转换为UTC的服务器上遇到了类似的问题,并且使用PHP5.3.28这是一个PHP错误,显然自2008年(!)以来一直存在,当时它第一次相关(可能更老) 有几件事: 是的,1nflktd的答案是正确的(并且应该保持被接受的答案)。PHP中有一

返回
2014-06-26 06:30:00

echo date('Y-m-d H:i:s', strtotime("2014-06-26 12:00:00 SGT"));
返回正确答案-
2014-06-26 06:00:00

有人知道为什么吗


我在转换为UTC的服务器上遇到了类似的问题,并且使用PHP5.3.28这是一个PHP错误,显然自2008年(!)以来一直存在,当时它第一次相关(可能更老)

有几件事:

  • 是的,1nflktd的答案是正确的(并且应该保持被接受的答案)。PHP中有一个bug

    嗯,与其说它是一个“bug”,不如说它是一个设计缺陷。当传递给
    strotime
    的字符串中包含时区缩写时,将通过解析。这是有问题的,因为,但也有许多人随着时间的推移改变了他们的定义。硬编码的偏移量可能不是有关日期的正确偏移量

    正如Karthik在评论中指出的,SGT过去是UTC+7:30,而不是当前的UTC+08:00。这实际上发生在1982年-

    如果可能,应避免将时区缩写传递给
    strotime

  • 我注意到你的成绩差了两个小时。这是因为您引用的PHP repl站点上的时区是
    欧洲/柏林
    ,该日期为UTC+02:00。因此,
    SGT
    +08:00
    被应用,但随后答案被转换为柏林时间

    您应该考虑使用.

  • 设置本地时区。
  • 如果您试图转换为UTC(GMT),可以使用
    gmdate
    ,如下所示:

    echo date('Y-m-d H:i:s', strtotime("2014-06-26 12:00:00 +08:00"));
    
    输出:
    2014-06-26 04:00:00
    ,这是正确的,因为4+8=12


@1nflktd噢,哈哈,抓得好!似乎仍与1年前和5.3.3.一样损坏。。你知道它是否在后面的版本中被修复了吗?这怎么还没修好!!!!!你想把这个作为答案吗?我会接受直到1981年,军士长是+730,不知道这是否是问题所在。。如果是的话。。这个bug有多大了:那么这是一个oooold bug:)哦,太酷了,我不知道abt
gmdate
。至于php repl时区,我知道不是在UTC,这是我特别谈论的30分钟的差异,而不是绝对偏移量本身。这可能是一个设计缺陷,但也是一个错误,因为现在SGT是明确的+800…真是胡说八道。。刚才看到这个:D:D“{”sgt“,027000,“亚洲/新加坡”},{”sgt“,028800,“亚洲/新加坡”},“显然新加坡在那里两次!
date_default_timezone_set("Asia/Singapore");
echo gmdate('Y-m-d H:i:s', strtotime("2014-06-26 12:00:00"));