如何从此字符串创建php日期时间对象

时间:2015-02-21 20:32:15

标签: php datetime timezone

我有这样的日期时间字符串:

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?那么什么性格?如何处理DST?

2 个答案:

答案 0 :(得分:4)

该日期字符串并不常见,并且其中包含一些不必要的信息(最后)。要解析它,我只是告诉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');

Demo

答案 1 :(得分:1)

我在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

     

T - Timezone缩写示例:EST,MDT ......