是否可以将正常日期转换为ISO 8601时间格式?

时间:2011-11-23 01:41:44

标签: php

我正试图改变这种日期格式:

  

2011年11月10日星期四下午10:37

采用ISO 8601格式(使用PHP)。我怎样才能做到这一点?我试过了:

date("c", $row2['time'])

显然,这是不正确的,因为timeago jQuery插件说“41年前”,这绝对不是41年前。

是否无法将此类日期转换为ISO 8601格式?

我已尝试搜索此内容,但我没有找到任何有关如何将此格式转换为ISO 8601的解决方案。

2 个答案:

答案 0 :(得分:4)

您可以使用可能使用DateTime::createFromFormatstrtotime创建的DateTime对象:

<?php
date_default_timezone_set('America/New_York');
$date = 'Thursday, November 10th, 2011 at 10:37 PM';
$date = str_replace( 'at', '', $date);
echo date("c", strtotime( $date));

Demo

编辑:以下是使用对象的DateTime示例。请注意,对于这两个示例,您应该从valid timezone strings列表中设置正确的时区。

$date_obj = DateTime::createFromFormat( 'l, F jS, Y \at h:i A', 'Thursday, November 10th, 2011 at 10:37 PM', new DateTimeZone( 'America/New_York'));
echo $date_obj->format('c');

Demo

答案 1 :(得分:2)

尝试

$date = date('c', strtotime(str_replace(' at ', ' ', 'Thursday, November 10th, 2011 at 10:37 PM')));
echo $date;

strtotime解析您的字符串并将其转换为Unix时间戳。 date然后将您的日期重新格式化为ISO 8601日期。