将日期从 xml 转换为可读格式

Posted

技术标签:

【中文标题】将日期从 xml 转换为可读格式【英文标题】:Converting date from xml to readable format 【发布时间】:2021-12-26 17:38:24 【问题描述】:

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

谢谢,彼得

【问题讨论】:

你的功能是什么? PHP 具有可靠的内置日期格式支持。 us3.php.net/manual/en/book.datetime.php 你在 php.ini 中正确设置了时区吗? 【参考方案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?

【讨论】:

以上是关于将日期从 xml 转换为可读格式的主要内容,如果未能解决你的问题,请参考以下文章

将日期/时间转换为可读格式。

MAGNOLIA CMS - 使用 cmsu:simpleSearch 和 cmsu:searchResultSnippet 链接无法正确显示并且无法将日期转换为可读格式

Matlab:将从excel导入的日期转换为可读格式?

Android将gmt时间转换为可读日期

使用记录编辑器工具将大型机中的 COMP-3 列转换为可读格式

将时间(自 YYYY 以来的天数给出)转换为可读的时间格式