我正在尝试在PHP中生成一个时间戳,以便与API一起使用。我似乎无法获得格式化的时间戳。正确的格式是:
UTC ISO8601日期时间格式: YYYY-MM-DDTHH:MM:SS.mmmmmmmZ
示例: 2013-04-24T11:11:50.2829708Z
编辑,让我澄清一下我遇到的实际问题:
' Z'属性以秒为单位返回时区偏移量。我需要返回的偏移量作为日期(' c')返回它。
实施例: +01:00而不是3600
PHP中是否有内置函数?
答案 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日期使用的是这种格式,可能没有必要。