Luk*_*uke 4 php timezone mktime
我正在研究一些与时间相关的功能,我选择始终使用UTC时间并将时间戳存储为整数以保持一致性.
但是,我注意到当我使用mktime它时,似乎当前设置的时区会影响返回值mktime.从我理解的文档中,mktime应该返回自epoch以来的秒数:
返回与给定参数对应的Unix时间戳.此时间戳是一个长整数,包含Unix Epoch(1970年1月1日00:00:00 GMT)与指定时间之间的秒数.
http://php.net/manual/en/function.mktime.php
但是,似乎mktime包括当前设置的时区.使用以下代码时:
date_default_timezone_set('UTC');
$time = mktime(0, 0, 0, 1, 1, 2016 );
echo "{$time}\n";
date_default_timezone_set('Australia/Sydney');
$time = mktime(0, 0, 0, 1, 1, 2016 );
echo "{$time}\n";
Run Code Online (Sandbox Code Playgroud)
我希望这两个时间值相同,但显然它们不是:
1451606400
1451566800
Run Code Online (Sandbox Code Playgroud)
这似乎是一个11小时的差异:
1451606400 - 1451566800 = 39600 / (60*60) = 11
Run Code Online (Sandbox Code Playgroud)
我在使用时没有正确理解mktime和/或为什么要考虑时区mktime?
我不能告诉你为什么它是这样的(PHP在日期和时间方面对我来说从来没有意义)但是有一个替代功能gmmktime(),它是
与mktime()相同,但传递的参数表示GMT日期.gmmktime()在内部使用mktime(),因此只能使用在派生本地时间内有效的时间.
也有此功能的PHP文件上的评论,说明如何mktime(),gmmktime()和time()工作.从本质上讲,他们认为即使UNIX时间戳本身没有时区,您也总是在时区中思考.