【问题标题】:Converting date from xml to readable format将日期从 xml 转换为可读格式
【发布时间】:2014-08-11 07:42:41
【问题描述】:

我在format: 2016-07-23T07:00:00.000Z 中有一个包含多个日期的 xml 文件。我正在使用 php 函数将其转换为在网站上发布的格式。这实际上应该导致类似Saturday, 24th of July(24th,而不是 23rd,因为时间偏移。我的函数以某种方式忽略了T07:00:00.000Z 部分并因此返回Friday, 23rd of July。任何人都可以帮助我用正确的方法来转换它日期?

谢谢,彼得

【问题讨论】:

标签: php xml date-formatting


【解决方案1】:
$oldDateTime= "2016-07-23T07:00:00.000Z"; // Your datetime as string, add as variable or whatever.
$newDateTime= date("Y-m-d H:i:s", strtotime($originalDate));

【讨论】:

    【解决方案2】:

    有问题的字符串

    2016-07-23T07:00:00.000Z
    

    a W3C datetime format (W3C DTF)完整的日期加上小时、分钟、秒和秒的小数部分),可以正确解析,包括。 date_create_from_format](http://php.net/date_create_from_format) 函数的几分之一秒:

    $originalDate = "2016-07-23T07:00:00.000Z";
    date_create_from_format('Y-m-d\TH:i:s.uO', $originalDate);
    

    它确实创建了一个新的DateTime,然后可以使用 PHP 标准代码对其进行格式化,例如

    date_create_from_format('Y-m-d\TH:i:s.uO', $originalDate)
        ->format('Y-m-d H:i:s'); # 2016-07-23 07:00:00
    

    由于 W3C 格式已经带有时区并且是 UTC,并且您写了想要不同的时区,因此需要指定它:

    date_create_from_format('Y-m-d\TH:i:s.uO', $originalDate)
        ->setTimezone(new DateTimeZone('Asia/Tokyo'))
        ->format('Y-m-d H:i:s');
    

    这在the previous answer 中不可见(并且可以通过给出的代码控制)的原因是因为date 根据default set timezone in PHP 格式化,其中每个DateTime 都有其单独的时区。

    正确解析(包括秒的小数部分)与其他答案的等价物是:

    $dateTime = date_create_from_format('Y-m-d\TH:i:s.uO', $originalDate);
    date('Y-m-d H:i:s', $dateTime->getTimestamp());
    

    如果您需要完整的日期值和/或对时区的更多控制,希望这能更好地解释它。

    格式另见:In what format is this date string?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-22
      • 2021-11-11
      相关资源
      最近更新 更多