如何使用PHP显示date为iso 8601格式
我试图从我的MySQL数据库中显示一个date时间作为一个ISO 8601格式与PHPstring,但它出错了。
2008年10月17日出现:1969-12-31T18:33:28-06:00这显然是不正确的(年份应该是2008年不是1969年)
这是我正在使用的代码:
<?= date("c", $post[3]) ?>
$post[3] is the datetime (CURRENT_TIMESTAMP)
我的MySQL数据库$post[3] is the datetime (CURRENT_TIMESTAMP)
。
任何想法出了什么问题?
date
的第二个参数是UNIX时间戳,而不是数据库时间戳string。
你需要用strtotime转换你的数据库时间戳。
<?= date("c", strtotime($post[3])) ?>
使用PHP版本5.2中提供的DateTime类可以这样做:
$datetime = new DateTime('17 Oct 2008'); echo $datetime->format('c');
看到它的行动
从PHP 5.4开始,您可以将其作为一个单行的内容:
echo (new DateTime('17 Oct 2008'))->format('c');
程序风格:
echo date_format(date_create('17 Oct 2008'), 'c'); // Output : 2008-10-17T00:00:00+02:00
面向对象的风格:
$formatteddate = new DateTime('17 Oct 2008'); echo $datetime->format('c'); // Output : 2008-10-17T00:00:00+02:00
混合1:
echo date_format(new DateTime('17 Oct 2008'), 'c'); // Output : 2008-10-17T00:00:00+02:00
混合2:
echo date_create('17 Oct 2008')->format('c'); // Output : 2008-10-17T00:00:00+02:00
备注:
1)您也可以使用'Ymd\TH:i:sP'
替代'c'
作为格式。
2)input的默认时区是服务器的时区。 如果您希望input是针对不同的时区,则需要明确设置您的时区。 这也会影响你的输出,但是:
echo date_format(date_create('17 Oct 2008 +0800'), 'c'); // Output : 2008-10-17T00:00:00+08:00
3)如果您希望输出的时区与您input的时区不同,可以明确设置您的时区:
echo date_format(date_create('17 Oct 2008')->setTimezone(new DateTimeZone('America/New_York')), 'c'); // Output : 2008-10-16T18:00:00-04:00
预先PHP 5:
function iso8601($time=false) { if(!$time) $time=time(); return date("Ymd", $time) . 'T' . date("H:i:s", $time) .'+00:00'; }
这里是PHP5之前的好function:我在最后添加了GMT差异,它没有硬编码。
function iso8601($time=false) { if ($time === false) $time = time(); $date = date('Ymd\TH:i:sO', $time); return (substr($date, 0, strlen($date)-2).':'.substr($date, -2)); }