Почему strtotime дает разные результаты в разных часовых поясах?

Я не уверен, почему 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 ().

http://php.net/manual/en/function.strtotime.php

Используйте 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 с этой функцией;)