Я работаю над некоторыми функциями, связанными со временем, и я предпочитаю всегда использовать время UTC и хранить метки времени как целые числа для согласованности.
Однако я заметил, что когда я использую 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";
Я ожидал бы, что два значения времени будут одинаковыми, но, по-видимому, это не так:
1451606400
1451566800
Кажется, разница составляет ровно 11 часов:
1451606400 - 1451566800 = 39600 / (60*60) = 11
Что я не правильно понимаю в mktime
и/или почему при использовании mktime
учитывается часовой пояс?