鉴于UTC偏移量和日期时间,我们如何在PHP中找到其UTC日期时间?

时间:2011-02-23 04:30:53

标签: php datetime timezone

例如,我有这种格式的日期时间,它的UTC偏移量是+3:

2011-02-23 05:00:00

所以它的UTC时间实际上是:

2011-02-23 02:00:00

但是在PHP中进行这种转换的最简单方法是什么?

我曾考虑使用DateTimeZone类,但正如您所看到的,我只有偏移而不是时区名称。要构造DateTimeZone对象,需要时区名称。

如果没有使用DateTimeZone类,可能会有更好的方法。

提前致谢。

2 个答案:

答案 0 :(得分:2)

可以根据偏移量修改日期。如果您有兴趣将其更改为其他时区,请使用UTC时区创建日期。

$date = new DateTime('2011-02-23 05:00:00', new DateTimeZone('UTC'));
$date->modify(sprintf('%s%d hours', $offset < 0 ? '+' : '-', $offset));

注意:即使偏移量是字符串,这也会起作用。即“-3”或“+ 3”

然后,例如,如果你想在澳大利亚墨尔本看到那个时间。

$date->setTimezone(new DateTimeZone('Australia/Melbourne'));
echo $date->format('c');

答案 1 :(得分:1)

您可以使用date()和strtotime()。

$in = "2011-02-23 05:00:00";
$offset = "-3 hours";
$out = date('Y-m-d H:i:s',strtotime("$in $offset"));

同样值得注意的是,通过这种方式,您不会受到抵消的限制。 strtotime()函数可以让你做各种奇妙的事情,比如“-2周+3天......”等。

您也可以从date()获取任何日期格式,或者仅使用strtotime()来获取时间戳。