提问人:Madara's Ghost 提问时间:5/13/2012 更新时间:5/13/2012 访问量:364
如何将 GMT 时区传递给 PHP DateTime 对象?
How do I pass GMT timezones to PHP DateTime object?
问:
PHP DateTime 对象(更具体地说,是 DateTimeZone 对象)支持许多时区。这一切都很好,但是有没有办法将 GMT 偏移量作为时区传递?
我知道可以简单地增加或减少小时数并应用一些数学运算,但我想知道是否有一种内置的、健壮的做事方式(或者我是否需要为此制作自己的抽象层)。
TL;DR 如何在 PHP 的 DateTime 或 DateTimeZone 对象中将值作为时区传递?GMT+N
答:
2赞
Matthew
5/13/2012
#1
您可以这样做:
$tz = new DateTimeZone('etc/GMT+2');
但是有这样的警告:
请不要使用此处列出的任何时区(UTC 除外),它们仅出于向后兼容的原因而存在。
该列表仅支持整小时。某些用户可能所在的时区未按小时对齐。另请注意,如果用户通过 UTC 偏移量选择时间,则必须在夏令时/夏令时期间每年更改两次。按位置选择消除了这种需求。
评论
0赞
Madara's Ghost
5/13/2012
谢谢你的回答!我的代码不应该显示实际时间,并且还考虑了 DST。所以我对这个很满意。谢谢!
1赞
ntninja
5/13/2012
#2
您可以尝试使用 http://php.net/manual/timezones.others.php 中列出的“Etc/GMT??”时区
不幸的是,这些值仅被标记为“向后兼容原因”,但如果没有任何其他方法可以做到这一点,您也可以使用它们。请注意,这些值不包括某些地区(如纽芬兰)使用的 :30 偏移量,因此您稍后会遇到问题。
另一种选择是手动创建一个 array(),将每个时区映射到位于该区域某处的时区名称:
array(
0 => "UTC",
1 => "Europe/Paris",
...
)
评论
0赞
Madara's Ghost
5/13/2012
晚了 2 分钟,但您的答案是有效的。由于我实际上没有显示实际时间(这很复杂),所以很酷。我不知道 :30 偏移量,我也会考虑这些。谢谢!
0赞
Dhiraj
5/13/2012
#3
您可以使用 DateTime 和 setTimestamp 执行此操作
假设时间格式是这样的Sun, 13 May 2012 01:07:00
$currentDate = new DateTime();
$currentDate->setTimestamp(strtotime( $time.' GMT+0400'));
注意:您必须注意夏令时
评论
0赞
Madara's Ghost
5/13/2012
看起来很骇人听闻......我使用的目的是避免需要或任何其他令人讨厌的功能!谢谢你的建议!DateTime()
strtotime
mkdate
下一个:访客点击计数器 - 建议的方法
评论