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


ISO8601 Date in PHP with Format YYYY-MM-DDTHH:MM:SS.mmmmmmmZ

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

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

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

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

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

示例:+01:00而不是3600

PHP中有内置的函数吗?

您正在寻找DateTime::format方法与c格式化程序或DateTime::ISO8601常量的组合:

$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"

要在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提供的日期格式/常量列表:

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" ;

好的是我们有ISO8601格式。但是,该值可能与您预期的不一样(YYYY-MM-DDTHH:MM:SS.mmmmmmmZ)。根据ISO 8601维基百科页面,以下是有效的格式:

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

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

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

注意:我之所以有3位小数,是因为我注意到Javascript日期使用了这种格式,这对你来说可能没有必要。