Я не уверен, почему strtotime()
в PHP возвращает другой результат в другой часовой пояс, даже если такая же дата указана как параметр, кто-нибудь знает ответ? Я также хочу знать, могу ли я сделать аналогичную задачу (преобразование datetime
в int
чтобы делать вычисления легко) с другой функцией, которая дает тот же результат в разных часовых поясах?
РЕДАКТИРОВАТЬ:
Пример: если я использую strtotime('2011-09-19 00:00:00')
не следует ли просто вернуть разницу между 'January 1 1970 00:00:00'
и '2011-09-19 00:00:00'
в секундах? Почему часовой пояс является проблемой здесь? И могу ли я получить что-то, что дает разницу без проблемы с часовым поясом?
Короче: часовой пояс считается, потому что значение Unix Epoch считается в GMT.
В более широком смысле 2011-09-19 00:00:00
приходит в Бангладеш почти через 6 часов 2011-09-19 00:00:00
в зоне GMT. Из-за этого пробела в зоне GMT, когда в BD появляется такая же дата, еще 21600
секунд.
Поскольку расчет выполняется в отношении GMT, вы должны добавить эти 21600
секунд, чтобы получить фактическую разницу.
strtotime
дает разные результаты в разных часовых поясах, потому что он учитывает часовые пояса …
Из strtotime
:
Функция ожидает получить строку, содержащую английский формат даты, и попытается разобрать этот формат на отметку времени Unix (количество секунд с 1 января 1970 года 00:00:00 по UTC)
Эта функция будет использовать переменную окружения TZ (если доступно) для вычисления временной метки. Начиная с PHP 5.1.0 есть более простые способы определения часового пояса, который используется во всех функциях даты / времени. Этот процесс объясняется на
date_default_timezone_get()
функцииdate_default_timezone_get()
.
Посмотрите на mktime()
.
Начиная с PHP 5.1 вы можете использовать date_default_timezone_set перед вызовом mktime
или strtotime
.
Из руководства по PHP:
Эта функция будет использовать переменную окружения TZ (если доступно) для вычисления временной метки. Начиная с PHP 5.1.0 есть более простые способы определения часового пояса, который используется во всех функциях даты / времени. Этот процесс объясняется на странице функции date_default_timezone_get ().
Используйте date_default_timezone_set
перед вызовом функций даты и времени, чтобы выбрать, в какой часовой пояс вы хотите работать.
http://www.php.net/manual/en/function.date-default-timezone-set.php
Из PHP-документов в strtotime
:
Эта функция будет использовать переменную окружения TZ (если доступно) для вычисления временной метки. Начиная с PHP 5.1.0 есть более простые способы определения часового пояса, который используется во всех функциях даты / времени. Этот процесс объясняется на странице функции date_default_timezone_get ().
Попробуйте настроить свой часовой пояс .
я думаю, вероятно, будет один раз каждый программист php, что эта функция заставит его действительно понять, как работает php с функциями даты и времени.
смешно эта функция, когда вы пытаетесь что-то вроде … err … например, предположите, что сегодня в этот самый момент 11 июля 2012 года в 13:00:00 (2012-07-11 13:00:00), а затем вы пытаетесь strtotime найти точно такой же момент дня, но на завтра:
$x = strtotime('2012-07-12 13:00:00'); $y = strtotime('+1 Day'); $z = $x-$y;
$ x и $ y из вышеперечисленных первых двух строк не возвратят то же самое, даже если вы проигнорируете минуты и секунды, но $ z будет около 25200 или около 7 часов в разнице между этими двумя строками, если ваш сегмент находится где-то из США, что GMT составляет -5 часов, но ваш браузер вызывает эту функцию от берлина летом, где GMT +2 часа … LOL теперь вы можете понять, как работает php с этой функцией;)