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

问题描述 投票:0回答:10

如何将时间从

2010-12-30 23:21:46
转换为 ISO 8601 日期格式? (-_-;)

php datetime date-format datetime-format time-format
10个回答
281
投票

面向对象

这是推荐的方式。

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

49
投票

在 PHP 5 之后,您可以使用此:

echo date("c");
形成 ISO 8601 格式的日期时间。

http://ideone.com/nD7piL

备注:

关于this,这两个表达式对于时区都有效,基本格式为:

±[hh]:[mm], ±[hh][mm], or ±[hh]

但请注意,+0X:00 是正确的,+0X00 对于扩展使用是不正确的。所以最好使用

date("c")
。类似的讨论这里


7
投票

如何从 ISO 8601 转换为 unixtimestamp :

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

如何从 unixtimestamp 转换为 ISO 8601(时区服务器):

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

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

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

如何从 unixtimestamp 转换为 ISO 8601(自定义时区):

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

5
投票

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

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

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

4
投票

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

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

T


3
投票

ISO 8601 在 PHP 中基本上表示为

"Y-m-d\TH:i:sP"

您可以从常量中获取该值:

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

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


3
投票

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

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

1
投票

你可以试试这个方法:

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

echo $datetime->format(DATE_ATOM);

0
投票

您还可以通过模态内部的突变来获得时间戳转换,如下所示

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

0
投票

试试这个

public static function toISO8601 (string $datetime) : string { 
        $datetime = new \DateTime($datetime, new \DateTimeZone('UTC'));
        return $datetime->format('Y-m-d\\TH:i:s.vp');
}

输出将为:2010-12-30T04:56:00.000Z

© www.soinside.com 2019 - 2024. All rights reserved.