Я работаю над некоторыми функциями, связанными со временем, и я предпочитаю всегда использовать время UTC и хранить метки времени как целые числа для согласованности.PHP mktime и часовой пояс
Однако, я заметил, что когда я использую mktime
, кажется, что установленный часовой пояс имеет влияние возвращаемого значения mktime
. Из документации Я понимаю, что mktime
должна возвращать количество секунд с начала эпохи:
Возвращает метку времени Unix, соответствующие аргументы. Эта временная метка представляет собой длинное целое число, содержащее количество секунд между эпохи Unix (1 января 1970 года 00:00:00 по Гринвичу) и указанное время.
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";
я ожидал бы два времени VALES быть такими же, но, видимо, они не являются:
1451606400
1451566800
который, кажется, exacly 11 часов разница:
1451606400 - 1451566800 = 39600/(60*60) = 11
Что я не понимаю правильно о mktime
и/или почему учетный пояс принимается во внимание при использовании mktime
?
Ouch. Это ужасно. Все, что им нужно было сделать, - всегда использовать UTC во всех временных функциях и включать только часовой пояс при «отображении» времени. Думаю, так оно и есть из-за «истории» PHP ... Спасибо за ваш ответ! – Luke