我有这样的日期时间字符串:
2015-02-13 22:00 GMT+1-DST
2015-03-20 21:00 GMT-5+DST-
我开始尝试:
<?php
$date = DateTime::createFromFormat('Y-m-d H:i ', '2015-03-20 21:00 GMT-5 +DST');
echo $date->format('d-m-Y H:i');
?>
然而,我被时区和夏令时卡住了。我在上看到http://php.net/manual/en/datetime.createfromformat.php我可以用e, O, P and T
表示时区,但我不明白哪个字符代表什么。我可以直接这样用吗?我必须将-5转换为例如-0500吗?那是什么角色?夏令时该怎么办?
该日期字符串并不常见,并且其中包含一些不必要的信息(在末尾)。为了解析它,我只告诉DateTime::createFromFormat()
使用+
字符忽略GMT
和+DST
部分。O
字符足够聪明,可以处理-5
并将其转换为-0500
。如果我们不忽略它们,则新DateTime对象中的时区是不正确的。
<?php
$date = DateTime::createFromFormat('Y-m-d H:i +O +', '2015-03-20 21:00 GMT-5 +DST');
echo $date->format('d-m-Y H:i');
演示
我在http://php.net/manual/en/function.date.php.是的,我相信你可以直接使用它。
e-时区标识符(添加在PHP 5.1.0中)示例:UTC、GMT、,大西洋/亚速尔群岛
O-与格林尼治时间(GMT)的时差(以小时为单位)示例:+0200
p-与格林尼治时间(GMT)的差值,冒号介于小时和之间分钟(添加在PHP 5.1.3中)示例:+02:00
时区缩写例如:EST、MDT。。。