如何将GMT时区传递给PHP DateTime对象?

时间:2012-05-12 19:26:38

标签: php datetime timezone

PHP DateTime对象(更具体地说,DateTimeZone对象),supports many time zones。这一切都很好,但有没有办法将GMT偏移作为时区传递?

我知道可以简单地添加或减去小时并应用一些数学,但我想知道是否有一种内置的,强大的做事方式(或者我是否需要为此创建自己的抽象层)。

TL; DR如何在PHP的DateTime或DateTimeZone对象中将GMT+N值作为时区传递?

3 个答案:

答案 0 :(得分:2)

你可以这样做:

$tz = new DateTimeZone('etc/GMT+2');

但是有这个警告:

  

请不要使用此处列出的任何时区(除了UTC),它们仅出于向后兼容的原因而存在。

该列表仅支持整个小时。您的某些用户可能居住在时区不对齐的时区。另请注意,如果用户通过UTC偏移选择时间,他们将在夏令时/夏令时期间每年更改两次。按位置选择消除了这种需求。

答案 1 :(得分:1)

您可以尝试使用“Etc / GMT ??” http://php.net/manual/timezones.others.php

列出的时区

不幸的是,这些值仅标记为“向后兼容的原因”,但如果没有任何其他方法可以使用它们,也可以使用它们。请注意,这些值不包括:在纽芬兰等某些地区使用了30个偏移量,因此您以后会遇到问题。

另一种选择是手动创建一个数组(),将每个时区映射到位于该区域某处的时区名称:

array(
    0 => "UTC",
    1 => "Europe/Paris",
    ...
)

答案 2 :(得分:0)

您可以使用DateTime和setTimestamp

执行此操作

说时间格式类似于Sun, 13 May 2012 01:07:00

$currentDate = new DateTime();

$currentDate->setTimestamp(strtotime( $time.' GMT+0400'));
  

注意:您必须照顾DST