スケジュール情報を ISO8601 形式で返す JSON イベント API に接続しています。
"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 形式で送信できます (Mon, 02 Jun 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 の方が適切な形式のようです。
一方で、可能なすべての日付/オフセットの組み合わせとタイム ゾーンを指定する、非常に複雑な配列を作成することもできます。それは間違いなく、やりすぎのようです。