我正在连接到以 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 格式的日程安排信息(星期一,2014 年 6 月 2 日 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 似乎是一种更合适的格式。
另一方面,我可以做一些过于复杂的数组,在其中我指定每个可能的日期/偏移组合与时区。毫无疑问,这看起来工作量太大了。