Я подключаюсь к API событий JSON, который возвращает информацию о расписании в формате ISO8601.PHP: конвертировать ISO8601 в реальный часовой пояс
"schedule": [
{
"datetime": "2014-06-02T19:30:00-04:00",
"speaker": "Keith Moore"
},
{
"datetime": "2014-06-03T19:30:00-04:00",
"speaker": "Phyllis Moore"
]
Когда я echo date("c", strtotime($schedule[$j]["datetime"]));
я 2014-06-02T18: 30: 00-05: 00. Конечно, это имеет смысл, так как date()
использует часовой пояс сервера.
Если я прохожу часовой пояс до date()
или использую date_default_timezone_set
), тогда он должен исправить ситуацию. К сожалению, нет спецификации того, что часовой пояс в ISO8610 (только смещение). Если я попытаюсь получить часовой пояс из даты ISO8601, используя date()
, тогда часовой пояс вернется к серверу.
Что я хочу сделать, это показать дату/время/часовой пояс, который является локальным для события (в данном случае - Eastern Daylight Time). Есть ли способ сделать это?
пару вариантов, которые я думали, но и не представляется целесообразным ...
Поскольку у меня есть контроль над API, я мог бы послать информацию расписания в RFC 822 формат (пн, 02 июня 2014 19: 30:00 EDT). Это дало бы мне крючки, которые я мог бы сделать ...
if ($pubDatetimezone == "PST" || $pubDatetimezone == "PDT") date_default_timezone_set("America/Los_Angeles");
if ($pubDatetimezone == "MST" || $pubDatetimezone == "MDT") date_default_timezone_set("America/Denver");
if ($pubDatetimezone == "CST" || $pubDatetimezone == "CDT") date_default_timezone_set("America/Chicago");
if ($pubDatetimezone == "EST" || $pubDatetimezone == "EDT") date_default_timezone_set("America/Montreal");
... но ISO8601 только кажется, более подходящий формат.
С другой стороны, я мог бы сделать слишком сложный массив, где я указывал каждую возможную комбинацию даты/смещения с часовым поясом. Это, безусловно, похоже на слишком много работы.
Из любопытства вы считали класс PHP DateTime, чтобы помочь вам решить вашу проблему? –
Я не знал, что он существует. Может ли он определить часовой пояс из смещения? – doubleJ
Возможный дубликат [Конвертировать UTC-смещение в часовой пояс или дату] (http://stackoverflow.com/questions/11820718/convert-utc-offset-to-timezone-or-date) – vascowhite