Короче
Существует ли официальная неопределенная часовая зона, которую PHP5 распознает для восточного СТАНДАРТНОГО времени – не восточное время DAYLIGHT?
Краткая история: -P
Ничего себе, я не могу поверить, что PHP создает такой кластер-флоген из установки времени.
Я хотел бы использовать PHP5 date_default_timezone_set (), чтобы установить часовой пояс для моего скрипта. Я хочу использовать стандартное время. Я не хочу, чтобы мой сценарий наблюдал летнее время. Я не хочу использовать gmtime () и вычитать 60 * 60 * 5 секунд каждый раз, когда моя программа записывает время. Я также не хочу сохранять это значение в переменной. Установка часового пояса по умолчанию более элегантна и делает сценарий более переносимым для других серверов и локалей.
К сожалению, PHP требует, чтобы я использовал один из своих глупых «официальных часовых поясов» при настройке часового пояса по умолчанию. Существует «America / New_York», но я понятия не имею, наблюдает ли он или какой-либо из официальных часов времени PHP время летнего времени. Через эксперименты я обнаружил, что «Америка / Нью-Йорк» действительно наблюдает за ДСТ. «Америка / Панама» – это EST и, следовательно, не соблюдает DST … но что, если Панама когда-нибудь изменит свое мнение о DST в будущем? (Они наблюдали DST в 1908 году)
Потому что Панама всегда могла передумать; Я просто хочу использовать GMT или UTC смещение.
Тогда есть это …
http://us.php.net/manual/en/timezones.others.php
Вышеупомянутый список ссылок, который я принимаю, – это устаревшие часовые пояса. «EST» находится там, но он очень ориентирован на США, поэтому я понимаю, почему он устарел. «Ect / GMT-5» тоже есть, и я не знаю, почему это устарело. Если вы спросите меня, все временные точки названия места должны быть устаревшими, а GMT timezones не устаревают … но получите это … «Ect / GMT-5» на самом деле ошибочно! Я должен был использовать «Ect / GMT + 5», чтобы получить восточное стандартное время США. Я почти уверен, что не на пять часов впереди Англии здесь, на Восточном побережье.
Никто не ответил на этот вопрос. Поэтому я думаю, что сам ответю. «Нет, нет, не устаревший часовой пояс, который PHP5 распознает для восточного СТАНДАРТНОГО времени»
Множество людей сказали мне, что я должен хранить даты как время UTC и переводить их по местному времени, когда я вытаскиваю их из хранилища – то, что я уже знаю. Проблема в том, что я был нанят, чтобы исправить эту небольшую часть скрипта, и я сомневаюсь, что парень собирается позволить мне переписать весь его код, который он использовал с самого начала PHP.
Я неохотно отдам дань уважения чуваку, который покажет вам, как правильно хранить и получать время, чтобы будущие люди искали это, чтобы узнать, как сделать это правильно.
То, что вы хотите сделать, не практично и приведет к тому, что ваши пользователи будут ненавидеть вас.
Вся причина названных часовых поясов заключается в точном представлении локального времени . Представление «стандартного» времени как локального времени, когда эта локальная область находится внутри DST, объективно неверна. Любой, кто находится в этом часовом поясе, который читает время, будет дезинформирован.
Если вам нужно хранить и работать с датами и временем, которые игнорируют часовые пояса, используйте для этой цели UTC, то есть хранилище и нормальную математику. Стоит помнить, что даже старая временная метка Unix – «секунды за полночь, 1 января 1970 года, UTC ».
Если вам нужно представлять время, местное для пользователя, то вы должны разрешить им выбирать местный часовой пояс и преобразовывать его на дисплей . Современные PHP DateTime и DateTimeZone делают эту простую . Из интерактивного приглашения:
php > $utc = new DateTimeZone('UTC'); php > $amla = new DateTimeZone('America/Los_Angeles'); php > php > $two_past_midnight = new DateTime('2011-04-05 00:02', $utc); php > $two_past_midnight->setTimeZone($amla); php > echo $two_past_midnight->format('Ymd H:i:s'); 2011-04-04 17:02:00
Никакой беспорядок, никакой суеты. Он позаботился о математике для нас, когда мы переключили часовой пояс.
В альтернативном случае, если вы действительно хотите действительно сгладить getTransitions
DST, посмотрите на getTransitions
и getOffset
в сочетании с различными форматами getTransitions
date()
timezone date()
, в частности я. Вы можете вытолкнуть и подтолкнуть полученную информацию, чтобы найти, когда «стандартная» версия любой зоны DST перейдет и соответственно ее отрегулировать. Помните, что разные области перехода в разное время, а не все области переходят на одну и ту же сумму … и некоторые вообще не переходят. Я думаю, что кто-то уже упоминал Индиану .
Обычно я также предлагаю пример кода, но математика даты наполняет меня ненасытной жаждой насилия. Тот, кто решил, что 60, 60, 24, 7, 4-6, 12 и 52 был приемлемым способом думать о временах, и даты были злыми, злыми людьми. К счастью, все они были мертвы между сотнями и тысячами лет.
America/New_York
DST и является рекомендуемым America/New_York
. (Я пошел на конференцию в прошлом году, где говорил Дерик Ретанс , написавший много кода даты / времени). Идея региональных часовых поясов заключается в том, что они подчиняются правилам часового пояса для города / региона, которые они обозначают (вот почему есть как 7 часовых поясов Индианы).
echo ' Format ' . date('m/d/YH:i:s a') ; <br/>//maketime function- mktime(hour,minute,second,month,day,year,is_dst) <br/>$EasternTimeStamp =mktime(date('H')-6,date('i'),date('s'),date("m"),date("d"),date("Y")); <br/>// date function- date(format, timestamp) <br/>echo 'Format ' . date('m/d/YH:i:s a',$EasternTimeStamp) ;
Вы всегда должны хранить время с использованием UTC, которое возвращает time()
, а затем устанавливает часовой пояс на основе местоположения сервера, который будет обновляться для DST, если это применимо.
Ну, если вы действительно хотите X часов до или после UTC, я бы сделал следующее:
$now = gmdate('Ymd H:i:s', time() - 3600 * $hours);
Думаю, в вашем случае $hours
будет 5.
Как и другие, я включил себя, это не очень хорошая практика … Но вы об этом знаете.