You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何PHP的DATE_RFC7231格式会忽略时区设置?

问题解答

这是故意设计的行为,完全符合RFC7231的规范要求,既不是PHP的BUG,也不是你对格式的误解。

核心原因:

RFC7231是HTTP协议的标准规范,其中明确规定:HTTP报文里的日期相关头部(比如Date、Last-Modified)必须使用GMT(UTC)时区,格式固定为Day, DD Mon YYYY HH:MM:SS GMT,不允许使用其他时区偏移或时区标识。

PHP提供的DATE_RFC7231常量,就是专门用来生成符合HTTP标准的日期字符串。因此不管你的DateTime对象本身设置的是什么时区,使用这个格式格式化时:

  • 会自动将时间转换为GMT(UTC)时区
  • 强制在末尾显示GMT标识

对你的代码示例的补充说明:

你的示例输出存在矛盾——原DateTime对象是+08:00时区的2023-02-15T06:44:41,对应的GMT时间应该是2023-02-14T22:44:41,而非示例中写的06:44:41 GMT。这大概率是示例书写时的笔误,实际运行DATE_RFC7231格式化会输出正确的GMT时间。

额外提示:

如果需要生成类似RFC7231风格但保留原时区偏移的字符串,不要用DATE_RFC7231,可以自定义格式字符串,比如:

echo DateTime::createFromFormat(DATE_ATOM, '2023-02-15T06:44:41+08:00')->format('D, d M Y H:i:s O');
// 输出:Wed, 15 Feb 2023 06:44:41 +0800

内容的提问来源于stack exchange,提问作者JSowa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 19:45:43