将日期从 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 链接无法正确显示并且无法将日期转换为可读格式