PHP DateTime对象(更具体地说,DateTimeZone 对象)支持许多时区。这一切都很好,但是有没有办法将 GMT 偏移量作为时区传递?
我知道可以简单地增加或减少小时并应用一些数学,但我想知道是否有一种内置的、健壮的做事方式(或者我是否需要为此制作自己的抽象层)。
TL;DR 如何在 PHP 的 DateTime 或 DateTimeZone 对象中将GMT+N
值作为时区传递?
你可以这样做:
$tz = new DateTimeZone('etc/GMT+2');
但是有这样的警告:
请不要使用此处列出的任何时区(UTC 除外),它们仅出于向后兼容的原因而存在。
该列表仅支持整小时。您的某些用户可能居住在未按小时对齐的时区中。另请注意,如果用户通过 UTC 偏移量选择时间,他们将不得不在夏令时/夏令时期间每年更改两次时间。按位置选择消除了这种需求。
尝试使用 http://php.net/manual/timezones.others.php 中列出的"Etc/GMT??"时区
不幸的是,这些值仅出于"向后兼容的原因"而被标记为",但是如果没有其他方法可以执行此操作,则不妨使用它们。请注意,这些值不包括纽芬兰等某些地区使用的 :30 偏移量,因此稍后会遇到问题。
另一种选择是手动创建一个 array(),将每个时区映射到位于该区域某处的时区名称:
array(
0 => "UTC",
1 => "Europe/Paris",
...
)
您可以使用DateTime和setTimestamp执行此操作
假设时间格式是这样的Sun, 13 May 2012 01:07:00
$currentDate = new DateTime();
$currentDate->setTimestamp(strtotime( $time.' GMT+0400'));
注意:您必须照顾DST