PHP DateTime对象(更具体地说是DateTimeZone对象),supports many time zones。这一切都很好,但是有没有办法将GMT偏移作为时区传递?如何将GMT时区传递给PHP DateTime对象?
我知道可以简单地加上或减去小时并应用一些数学运算,但是我想知道是否有内置的,可靠的做事方式(或者我是否需要为此创建自己的抽象层) 。
TL; DR如何将GMT+N
的值作为PHP的DateTime或DateTimeZone对象中的时区传递?
PHP DateTime对象(更具体地说是DateTimeZone对象),supports many time zones。这一切都很好,但是有没有办法将GMT偏移作为时区传递?如何将GMT时区传递给PHP DateTime对象?
我知道可以简单地加上或减去小时并应用一些数学运算,但是我想知道是否有内置的,可靠的做事方式(或者我是否需要为此创建自己的抽象层) 。
TL; DR如何将GMT+N
的值作为PHP的DateTime或DateTimeZone对象中的时区传递?
你可以这样做:
$tz = new DateTimeZone('etc/GMT+2');
但是有这样的警告:
,请不要使用任何这里(除了UTC)中列出的时区,他们只存在向后兼容的原因。
该列表只支持整个小时。您的某些用户可能生活在未按小时排列的时区中。另请注意,如果用户通过UTC偏移量选择时间,则在夏令时/夏令时期间,他们将不得不每年更换两次。按地点选择消除了这种需求。
谢谢你的回答!我的代码不应该显示实际的时间,并且DST也被考虑在内。所以我对这个很满意。谢谢! –
你可以尝试使用“Etc/GMT ??”在http://php.net/manual/timezones.others.php
上列出的时区只能将这些值标记为“向后兼容的原因”,但如果没有其他方法可以使用它们,则可以使用它们。请注意,这些值不包括:纽芬兰等一些地区使用的30个抵消额,所以稍后您会遇到问题。
另一种选择是手动创建一个数组(),每个时区映射到位于该区域某处区名称:
array(
0 => "UTC",
1 => "Europe/Paris",
...
)
2分钟太晚了,但您的答案是有效的。由于我实际上没有显示实际时间(很复杂),所以很酷。我不知道:30偏移量,我也会考虑这些。谢谢! –
为此,您可以使用DateTime和的setTimestamp
说时间格式是这样的Sun, 13 May 2012 01:07:00
$currentDate = new DateTime();
$currentDate->setTimestamp(strtotime($time.' GMT+0400'));
注意:你将不得不采取DST
看起来很讨厌...我使用'DateTime()'的目的是为了避免需要'strtotime'或'mkdate'或任何其他讨厌的函数!还是)感谢你的建议! –
的护理是很好,如果你可以像欧洲/巴黎添加的东西如时区? – Dhiraj
@DhirajBodicherla:不,重点是用户应该选择他的GMT时间,而不是位置时间。我不想做一些奇怪的映射。 –
会有DST的好处,但如果你不需要它,我想它的矫枉过正;-) – alexander255