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

2022-08-30 09:31:02

哪个RFC描述了现代时间HTTP标头中用于日期/时间的格式,例如“上次修改”和“如果修改以来”,以及如何根据这种格式在PHP中生成日期/时间字符串?

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

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


答案 1

正如你在这里看到的,上次修改的标头具有RFC2616格式的日期时间

14.29 上次修改时间部分中,您可以看到日期格式应为:

"Last-Modified" ":" HTTP-date

其使用的一个例子是

Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT

RFC2616的另一句话 阅读更多

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

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

echo gmdate('D, d M Y H:i:s T');

如果您希望使用扩展名: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');

答案 2

好吧,让我们来看看定义HTTP 1.1的RFC 2616:https://www.rfc-editor.org/rfc/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

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

(...)

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

因此,请使用有效的格式。根据RFC,首选的一个不是由类中的任何常量定义的。DateTime::COOKIEDatetime::RFC850D, d M Y H:i:s TDateTime

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

gmdate('D, d M Y H:i:s T');

推荐