php mktime для эпохи возвращает -3600, а не 0 - PullRequest
1 голос
/ 21 сентября 2010

Если я запускаю следующее в PHP:

echo mktime (0,0,0,1,1,1970);

Возвращаемое значение равно -3600, а не 0, как я ожидал.

Сервер базируется в Великобритании, в настоящее время он 21 сентября (т.е. летнее время BST) (хотя я не ожидаю, что это повлияет на метку времени эпохи) и для php.info: "Часовой пояс по умолчанию Европа / Лондон".

Установка флага перехода на летнее время также, как показано ниже, дает:

echo mktime (0,0,0,1,1,1970,0); (то есть правильный флаг DST, 0 как 1 января, не DST / BST) возвращает -3600

echo mktime (0,0,0,1,1,1970,1); (неправильный флаг - установка 1 января в качестве летнего времени) возвращает -7200

echo mktime (0,0,0,1,1,1970, -1); (т.е. флаг DST не установлен - оставлено на усмотрение PHP) возвращает -3600

Кто-нибудь знает, почему эпоха будет возвращена как -3600, а не 0, пожалуйста?

Ответы [ 2 ]

5 голосов
/ 21 сентября 2010

1 января 1970 года по британскому летнему времени было полночь , по Гринвичу - один час до полуночи.Попробуйте вместо этого установить часовой пояс UTC:

date_default_timezone_set('UTC'); // or just change php.ini
1 голос
/ 21 сентября 2010

mktime() зависит от вашего текущего часового пояса. Если вы хотите создать временную метку, основанную на GMT, вы должны использовать функцию gmmktime().

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

код на ideone


Ресурсы:

...