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”,不如说它是一个设计缺陷。当传递给
的字符串中包含时区缩写时,将通过解析。这是有问题的,因为,但也有许多人随着时间的推移改变了他们的定义。硬编码的偏移量可能不是有关日期的正确偏移量 正如Karthik在评论中指出的,SGT过去是UTC+7:30,而不是当前的UTC+08:00。这实际上发生在1982年- 如果可能,应避免将时区缩写传递给strotime
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"));
,这是正确的,因为4+8=122014-06-26 04:00:00
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"));