ISO8601 PHP格式的日期,格式为YYYY-MM-DDTHH:MM:SS.mmmmmmmZ

时间:2014-11-12 16:55:54

标签: php datetime iso8601

我正在尝试在PHP中生成一个时间戳,以便与API一起使用。我似乎无法获得格式化的时间戳。正确的格式是:

UTC ISO8601日期时间格式: YYYY-MM-DDTHH:MM:SS.mmmmmmmZ

示例: 2013-04-24T11:11:50.2829708Z

编辑,让我澄清一下我遇到的实际问题:

' Z'属性以秒为单位返回时区偏移量。我需要返回的偏移量作为日期(' c')返回它。

实施例: +01:00而不是3600

PHP中是否有内置函数?

2 个答案:

答案 0 :(得分:3)

您正在寻找与c格式化程序或DateTime::format method结合使用的DateTime::ISO8601 constant

$timestamp = new DateTime();
echo $timestamp->format('c'); // Returns ISO8601 in proper format
echo $timestamp->format(DateTime::ISO8601); // Works the same since const ISO8601 = "Y-m-d\TH:i:sO"

答案 1 :(得分:0)

要在PHP中以ISO 8601打印日期,您可以使用相当简单的程序样式date()函数:

$isoDate = date('c') // outputs 2017-10-18T22:44:26+00:00 'Y-m-d\TH:i:sO'  

或者如果你喜欢OOP风格,那么你可以像这样使用DateTime()

$date = DateTime('2010-01-01');
echo date_format($date, 'c');

PHP提供的日期格式/常量列表为mentioned here

const string ATOM = "Y-m-d\TH:i:sP" ;
const string COOKIE = "l, d-M-Y H:i:s T" ;
const string ISO8601 = "Y-m-d\TH:i:sO" ;
const string RFC822 = "D, d M y H:i:s O" ;
const string RFC850 = "l, d-M-y H:i:s T" ;
const string RFC1036 = "D, d M y H:i:s O" ;
const string RFC1123 = "D, d M Y H:i:s O" ;
const string RFC2822 = "D, d M Y H:i:s O" ;
const string RFC3339 = "Y-m-d\TH:i:sP" ;
const string RSS = "D, d M Y H:i:s O" ;
const string W3C = "Y-m-d\TH:i:sP" ;

好的是我们有ISO 8601格式。但是,该值可能与您期望的值不同(YYYY-MM-DDTHH:MM:SS.mmmmmmmZ)。根据{{​​3}},这些是有效的格式:

2017-10-18T22:33:58+00:00
2017-10-18T22:33:58Z
20171018T223358Z

PHP可能更喜欢第一个。我在处理PHP和Javascript之间的日期时遇到了类似的问题,因为Javascript结尾有一个尾随Z。我最后写这篇文章来解决这个问题:

$isoDate = date('Y-m-d\TH:i:s.000') . 'Z'; // outputs: 2017-10-18T23:04:17.000Z

注意:我有3位小数的原因是我注意到Javascript日期使用的是这种格式,可能没有必要。