2010-09-21 86 views
1

如果我运行在PHP以下:PHP mktime对于历元返回-3600,而不是0

回波mktime(0,0,0,1,1,1970);

返回的值是-3600,而不是0,如我所料。

服务器是基于英国的,目前它是9月21日(即BST夏令时)(尽管我不希望这会影响时代的时间戳),并根据php.info:“默认时区欧洲/伦敦”。

设定夏令时标志也,如下,得到:

回波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返回?

+1

为['mktime'](HTTP的'is_dst'参数://ca.php .net/manual/en/function.mktime.php)已被弃用从PHP 5.1开始。 – 2010-09-21 18:00:32

回答

5

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

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

+1,然后我给出了更详细/更好的解释。 – Wrikken 2010-09-21 18:07:22

+0

嗨,太棒了,谢谢。我认为很显然1970年1月1日必须在格林尼治标准时间(即不是BST/DST - 仅在3月下旬 - 10月下旬有效),因此unix时间戳为0 - 并未意识到日期被解释为与剧本在同一时区。我很高兴我用BST编写脚本,否则错误会被忽视,直到三月份的事情停止工作! – PHP 2010-09-21 18:24:32

+0

...刚刚发现了这个:http://en.wikipedia.org/wiki/British_Summer_Time - BST在1969/1970年冬季作为试用生效 – PHP 2010-09-22 21:39:48

1

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

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

code on ideone


资源:

+0

谢谢,有用! – PHP 2010-09-21 18:25:39