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

How to create a php datetime object from this string

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

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?那什么性格呢?夏令时怎么办?

我在 http://php.net/manual/en/function.date.php 找到了这个。 是的,我相信你可以直接使用它。

e - Timezone identifier (added in PHP 5.1.0) Examples: UTC, GMT, Atlantic/Azores

O - Difference to Greenwich time (GMT) in hours Example: +0200

P - Difference to Greenwich time (GMT) with colon between hours and minutes (added in PHP 5.1.3) Example: +02:00

T - Timezone abbreviation Examples: EST, MDT ...

该日期字符串不常见,其中包含一些不必要的信息(在末尾)。为了解析它,我只是告诉 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