gpt4 book ai didi

PHP:将 ISO8601 偏移量转换为实际时区

转载 作者:行者123 更新时间:2023-12-05 02:23:57 25 4
gpt4 key购买 nike

我正在连接到一个以 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 中时区的规范(只是偏移量)。如果我尝试使用 date() 从 ISO8601 日期获取时区,则时区返回到服务器的时区。

我想要做的是显示事件本地的日期/时间/时区(在本例中为东部夏令时)。有办法做到这一点吗?

我想到了几个选项,但似乎都不合适...

由于我可以控制 API,所以我可以发送 RFC 822 格式的日程信息(2014 年 6 月 2 日星期一 19:30:00 EDT)。那会给我一些我可以做的钩子(Hook)......

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。由于 ISO8601 是国际标准,PHP 支持它。您需要的代码如下:

$dt = DateTime::createFromFormat(DateTime::ISO8601, '2014-06-03T19:30:00-04:00');

您可以指定第三个参数,一个 DateTimeZone 对象,您可以使用它进一步偏移给定的日期。

比如你想用GMT -4作为GMT

$dt = DateTime::createFromFormat(DateTime::ISO8601, '2014-06-03T19:30:00-04:00', new DateTimeZone('Europe/London'));

在那之后,剩下的就是:

echo $dt->format('d.m.Y, H:i:s'); // format is the same as for date() function.

关于PHP:将 ISO8601 偏移量转换为实际时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17951061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com