1

如果我在 PHP 中运行以下命令:

回声 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

回声 mktime(0,0,0,1,1,1970,1); (不正确的标志 - 将 1 月 1 日设置为 DST)返回 -7200

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

有谁知道为什么时代会返回为-3600,而不是0,好吗?

4

2 回答 2

5

英国夏令时间1970 年 1 月 1 日午夜时分,距离格林威治标准时间午夜还有一小时。尝试将时区设置为 UTC:

date_default_timezone_set('UTC'); // or just change php.ini
于 2010-09-21T18:00:55.007 回答
1

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

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

ideone上的代码


资源 :

于 2010-09-21T18:04:58.917 回答