HTTP标头中使用的日期/时间格式

Des*_*ume 48 php date http rfc

哪个RFC描述了现代HTTP标头中用于日期/时间的格式,如"Last-Modified"和"If-Modified-Since",以及如何根据这种格式在PHP中生成日期/时间字符串?

有些消息来源指向RFC 2822,正如DateTime类所示,它使用的是D, d M Y H:i:s O格式,但从我的测试来看,这种格式+0000不是GMT最后生成的.我尝试了其他时区说明符,但它们似乎都没有放在GMT最后,我得到的最接近的结果是UTC.但是,正如Firebug所示,所有站点都GMT在HTTP标头中使用而不是+0000UTC.

那么实际使用的是什么格式?如何以与其他网站相同的方式格式化日期/时间?

Gla*_*vić 57

正如您在此处所见,Last-Modified标头具有RFC2616格式的日期时间.

在部分中,14.29 Last-Modified您可以看到日期格式应为:

"Last-Modified" ":" HTTP-date
Run Code Online (Sandbox Code Playgroud)

它的一个例子是

Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT
Run Code Online (Sandbox Code Playgroud)

RFC2616的另一个引用阅读更多:

所有HTTP日期/时间戳必须以格林威治标准时间(GMT)表示,无一例外.

在PHP中,D, d M Y H:i:s T如果使用gmdate()始终以GMT偏移量/时区返回日期时间的函数,则可以使用格式:

echo gmdate('D, d M Y H:i:s T');
Run Code Online (Sandbox Code Playgroud)

如果您想使用DateTime扩展名:

$dt = new DateTime('UTC');
#$dt = new DateTime('2013-01-01 12:00:00', new DateTimezone('UTC'));
echo $dt->format('D, d M Y H:i:s \G\M\T');
Run Code Online (Sandbox Code Playgroud)

  • GMT是_Greenwich平均时间_它是绝对的. (2认同)

han*_*nzi 15

那么,让我们看一下定义HTTP 1.1的RFC 2616:http: //tools.ietf.org/html/rfc2616#section-3.3

历史上,HTTP应用程序允许使用三种不同的格式来表示日期/时间戳:

 Sun, 06 Nov 1994 08:49:37 GMT  ; RFC 822, updated by RFC 1123
 Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
 Sun Nov  6 08:49:37 1994       ; ANSI C's asctime() format
Run Code Online (Sandbox Code Playgroud)

第一种格式是Internet标准的首选格式,它代表RFC 1123 [8](RFC 822 [9]的更新)定义的固定长度子集.

(......)

所有HTTP日期/时间戳必须以格林威治标准时间(GMT)表示,无一例外.

所以DateTime::COOKIEDatetime::RFC850使用有效的格式.根据RFC的优选的一个D, d M Y H:i:s T不是由DateTime类中的任何常量定义的.

要确保使用GMT,以下代码应该足够:

gmdate('D, d M Y H:i:s T');
Run Code Online (Sandbox Code Playgroud)

  • 那是接近但不一样的.它最终使用`O`而不是`T`,它将返回`+ 0000`而不是'GMT`(根据标准的要求). (2认同)