【问题标题】:How to create a php datetime object from this string如何从此字符串创建 php datetime 对象
【发布时间】:2015-02-21 20:32:15
【问题描述】:

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

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');
?>

但是我卡在时区和 DST 上。我在http://php.net/manual/en/datetime.createfromformat.php 上看到我可以使用e, O, P and T 作为时区,但我不明白哪个字符代表什么。我什至可以像这样直接使用它吗?我是否必须将 -5 转换为例如-0500?然后是什么性格?以及如何处理夏令时?

【问题讨论】:

    标签: php datetime timezone


    【解决方案1】:

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

    【讨论】:

    • 谢谢,但这似乎并没有得到正确的时区:eval.in/291852 - 它确实像这样工作:eval.in/291854 但是我必须删除 dst。
    • 是的 :) 我想确保时区是正确的,以防它对您的项目很重要。
    • 谢谢 :) 现在我可以使用完整的原始字符串了。
    【解决方案2】:

    我在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 - 时区缩写示例:EST、MDT ...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-08
      相关资源
      最近更新 更多