我正在連接到以ISO8601格式返回調度信息的JSON事件API。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()
,則時區會返回到服務器。
我想要做的是顯示事件本地的日期/時間/時區(在本例中爲東部夏令時)。有沒有辦法做到這一點?
,我想到的一對夫婦的選擇,但也似乎是適當的...
由於我有過API控制,我可以在RFC發送調度信息822格式(星期一,2014年6月2日19:美國東部時間30:00)。這會給我的鉤子,我可以做...
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