2

PHP DateTime 对象(更具体地说,DateTimeZone 对象)支持许多时区。这一切都很好,但是有没有办法将 GMT 偏移量作为时区传递?

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

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

4

3 回答 3

2

你可以这样做:

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

但是有这个警告:

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

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

于 2012-05-12T19:42:04.483 回答
1

您可以尝试使用“Etc/GMT??” http://php.net/manual/timezones.others.php中列出的时区

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

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

array(
    0 => "UTC",
    1 => "Europe/Paris",
    ...
)
于 2012-05-12T19:44:07.413 回答
0

您可以使用 DateTime 和 setTimestamp 执行此操作

说时间格式是这样的Sun, 13 May 2012 01:07:00

$currentDate = new DateTime();

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

注意:您必须注意 DST

于 2012-05-12T19:44:15.223 回答