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

时间:2014-06-20 14:03:10

标签: php xml date-formatting

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

谢谢,彼得

2 个答案:

答案 0 :(得分:1)

有问题的字符串

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,然后可以使用for 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?

答案 1 :(得分:0)

$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));