You need to enable JavaScript to run this app. PHP 7.1.33格式化2021年初日期时date函数为何返回错误年份
优惠活动
大模型
产品
解决方案
定价
更多

PHP 7.1.33格式化2021年初日期时date函数为何返回错误年份

问题核心原因
  • o是PHP date()函数中对应ISO-8601周归属年份的格式符,并非自然公历年的取值,这个表现和你当前使用的PHP 7.1.33版本无关,是格式符本身的规则定义导致的。
  • ISO-8601对周归属年的判定规则为:某周如果在当年包含的自然日不足4天,就会被划分到上一个公历年的周计数中,对应的周年份值就会输出上一年的数值。
日期边界的具体判定
  • 2021年1月1日为周五,按照规则计算:
    • 2021年的第一个合规ISO周从1月4日(周一)启动,这一周完整覆盖2021年的7个自然日,满足判定阈值,因此1月4日的o值为2021,输出符合预期。
    • 1月3日属于2020年12月28日-2021年1月3日的自然周,这一周里属于2021年的自然日仅有3天(1月1日-3日),未达到4天的判定标准,因此被划分为2020年的第53周,o值返回2020,出现了看似“年份显示错误”的结果。
修正方案
  • 如果需要输出日期本身对应的自然公历年,把格式符里的o替换成Y即可,也就是将date('M j, o', strtotime($date))修改为date('M j, Y', strtotime($date)),即可得到预期的2021年输出。
  • 如果业务逻辑本身需要遵循ISO周的年份计数规则,那么当前的输出是符合标准的,不需要调整。

修正后代码示例

$date = "2021-01-03 10:45:06";
echo date('M j, Y', strtotime($date)); // 输出 Jan 3, 2021,匹配预期

$date = "2021-01-04 10:45:06";
echo date('M j, Y', strtotime($date)); // 输出 Jan 4, 2021,匹配预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.10 16:45:04