php mktime for epoch返回-3600,而不是0

时间:2010-09-21 17:56:22

标签: php epoch mktime

如果我在PHP中运行以下内容:

echo mktime(0,0,0,1,1,1970);

返回值为-3600,而不是我预期的值。

服务器是英国的,它目前是9月21日(即BST夏令时)(虽然我不希望这会影响纪元时间戳)和每个php.info:“默认时区欧洲/伦敦”。

如下设置夏令时标志,给出:

echo mktime(0,0,0,1,1,1970,0); (即正确的DST标志,0表示1月1日而不是DST / BST) 返回-3600

echo mktime(0,0,0,1,1,1970,1); (错误的标志 - 将1月1日设为DST) 返回-7200

echo mktime(0,0,0,1,1,1970,-1); (即未设置DST标志 - 由PHP决定) 返回-3600

有谁知道为什么这个纪元将被退回-3600而不是0,拜托?

2 个答案:

答案 0 :(得分:5)

1970年1月1日午夜在英国夏令时,格林威治标准时间是午夜1小时。尝试将时区设置为UTC:

date_default_timezone_set('UTC'); // or just change php.ini

答案 1 :(得分:1)

mktime()基于您当前的时区。如果要基于GMT创建时间戳,则必须使用gmmktime()函数。

gmmktime(0,0,0,1,1,1970)

code on ideone


资源: