PHP date_default_timezone_set () Восточное стандартное время (EST)

Короче

Существует ли официальная неопределенная часовая зона, которую 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.

Как и другие, я включил себя, это не очень хорошая практика … Но вы об этом знаете.