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