如何在 PHP 中将日期时间转换为 ISO 8601

如何将时间从 2010-12-30 23:21:46转换为 ISO8601日期格式? (- _-;)

173023 次浏览

面向对象

这是推荐的方法。

$datetime = new DateTime('2010-12-30 23:21:46');


echo $datetime->format(DateTime::ATOM); // Updated ISO8601

程序性的

对于旧版本的 PHP,或者如果您更喜欢过程代码。

echo date(DATE_ISO8601, strtotime('2010-12-30 23:21:46'));

在 PHP5之后,您可以使用以下命令: echo date("c");表单 ISO8601格式的日期时间。

Http://ideone.com/nd7pil

注意:

关于 这个,这两个表达式对于时区和基本格式都有效: ±[hh]:[mm], ±[hh][mm], or ±[hh]

但是请注意,+ 0 X: 00是正确的,+ 0 X00对于扩展使用是不正确的。所以最好使用 date("c")。类似的讨论 给你

如何将 ISO 8601转换为 unixtime戳:

strtotime('2012-01-18T11:45:00+01:00');
// Output : 1326883500

如何从 unixtime戳转换为 ISO8601(时区服务器) :

date_format(date_timestamp_set(new DateTime(), 1326883500), 'c');
// Output : 2012-01-18T11:45:00+01:00

如何从 unixtime戳转换为 ISO 8601(GMT) :

date_format(date_create('@'. 1326883500), 'c') . "\n";
// Output : 2012-01-18T10:45:00+00:00

如何从 unixtime戳转换为 ISO8601(自定义时区) :

date_format(date_timestamp_set(new DateTime(), 1326883500)->setTimezone(new DateTimeZone('America/New_York')), 'c');
// Output : 2012-01-18T05:45:00-05:00

如果尝试在 datetime-local 中设置值

date("Y-m-d\TH:i",strtotime('2010-12-30 23:21:46'));


//output : 2010-12-30T23:21

你可以这样试试:

$datetime = new DateTime('2010-12-30 23:21:46');


echo $datetime->format(DATE_ATOM);

ISO 8601在 PHP 中基本上表示为 "Y-m-d\TH:i:sP"

你可以从一个常数中得到这个值:

DateTime::ATOM-用于7.2以下的 PHP 版本(已删除)

DateTimeInterface::ATOM-适用于7.2以来的 PHP 版本

根据 PHP 官方文档,你可以简单地将它格式化为:

echo $objDateTime->format('c'); // ISO8601 formated datetime
echo $objDateTime->format(DateTime::ISO8601); // Another way to get an ISO8601 formatted string

$datetime->format('Y-m-d\TH:i:s.u\Z')应该提供适当的格式,使用“ T”分隔符、“ Z”时区(确保首先转换为 UTC)和微秒(如果不打算支持小数秒,则忽略 .u)。

请参阅 https://stackoverflow.com/a/9532375/65387讨论为什么应该使用 T

您还可以通过如下模式中的变异获得时间戳转换

class YourModal extends Model
{
public function getCreatedAtAttribute($date)
{
return date(DATE_ISO8601, strtotime($date)); // ISO 8601 Date Format
}
}