php 为什么DATE_RFC7231格式忽略时区?

lvmkulzt  于 2023-02-18  发布在  PHP
关注(0)|答案(1)|浏览(178)

我最近在PHP中玩日期格式,DATE_RFC7231中硬编码的GMT时区让我很困惑。
我有两个相同的日期格式不同的例子,但是,即使输入是相同的,输出不同,因为时区的差异!所以,小时是不是铸造成比例的给定时区,它显示混乱的结果。

echo DateTime::createFromFormat(DATE_ATOM, '2023-02-15T06:44:41+08:00')->format(DATE_ATOM); //2023-02-15T06:44:41+08:00
echo DateTime::createFromFormat(DATE_ATOM, '2023-02-15T06:44:41+08:00')->format(DATE_RFC7231); //Wed, 15 Feb 2023 06:44:41 GMT

这是有意的,不管为Datetime对象设置的时区如何,总是显示GMT吗?还是我遗漏了RFC 7231格式的一些基本内容?

5gfr0r5j

5gfr0r5j1#

实际上,现在我看到它是从同一个输入生成06:44:41+08:0006:44:41 GMT,这有点不对。
然而,真正错误的是,认为格式字符串会对DateTime对象执行转换,常量DATE_RFC7231只是字符串"D, d M Y H:i:s \G\M\T",它将字符串GMT硬编码为格式。
解决方案是在格式化之前将时区设置为GMT,如下所示:

var_dump(
    DateTime::createFromFormat(DATE_ATOM, '2023-02-15T06:44:41+08:00')->
        setTimezone(new DateTimezone('GMT'))->
        format(DATE_RFC7231)
);

输出:

string(29) "Tue, 14 Feb 2023 22:44:41 GMT"

相关问题