Почему php timestamp ведет себя так?03 / Ноябрь / 1985 - PullRequest
2 голосов
/ 26 июня 2011

Я пытался создать свой собственный php mktime();, используя часовой пояс по умолчанию * (Америка / Sao_Paulo) *. Работало нормально, но я заметил, что у некоторых меток времени было на час больше, чем должно быть. Итак, я разыскал и выяснил эту дату, когда сценарий начинает отсутствовать: 03 ноября / 1985 Я провел несколько тестов и по какой-то странной причине (вот что я пытаюсь понять), в этот день осталось всего 23 часа! Проверьте это:

<?php

date_default_timezone_set('America/Sao_Paulo');

//shows 23
echo (mktime(0,0,0,11,03,1985)- mktime(0,0,0,11,02,1985))/3600; 

//any other date, shows 24
echo '<br/>'.(mktime(0,0,0,11,3,2000)-mktime(0,0,0,11,2,2000))/3600; 

?>

Обратите внимание, что это не происходит с часовым поясом UTC. Это возможная ошибка?

PS: извините за английские ошибки.

Ответы [ 2 ]

3 голосов
/ 26 июня 2011

Вы выбрали дату, которая представляет начало летнего времени в Бразилии для 1985 года. См. http://tldp.org/HOWTO/TimePrecision-HOWTO/tz.html.

Итак, из-за изменения времени в эту конкретную дату разница между полуночьюна два дня только 23 часа.

3 голосов
/ 26 июня 2011

Звучит как проблема экономии времени.Вероятно, только 23 часа, потому что DST опережает часы, пропуская 1 час.

Есть дополнительный аргумент для mktime , называемый is_dst.Попробуйте установить его в 0 или 1 и посмотрите, решит ли это вашу проблему, хотя вывод, который вы получаете, вполне может быть правильным.

...