PHP DateTime对象(更具体地说,DateTimeZone对象),supports many time zones。这一切都很好,但有没有办法将GMT偏移作为时区传递?
我知道可以简单地添加或减去小时并应用一些数学,但我想知道是否有一种内置的,强大的做事方式(或者我是否需要为此创建自己的抽象层)。
TL; DR如何在PHP的DateTime或DateTimeZone对象中将GMT+N
值作为时区传递?
答案 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