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

Yii2使用formatter->asDate()处理远古日期时返回错误结果

为何处理远古日期时会出现日期偏差?

这是因为公历历法的历史变更导致的:1582年之前全球普遍使用儒略历,之后改用格里高利历,两者在1582年10月存在10天的断层(10月4日次日直接是10月15日)。

PHP的日期处理默认会自动识别历法转换,对1582年之前的日期进行儒略历到格里高利历的换算。而Yii的formatter组件底层依赖PHP的日期函数,所以会继承这个特性。你输入的1581-10-10是儒略历日期,经过换算后对应格里高利历的1581-09-30,因此输出结果为“30 Sep 1581”。

如果需要按照原始儒略历日期直接格式化,不进行历法转换,可以使用PHP的DateTime类指定历法:

$date = new DateTime('1581-10-10');
$date->setCalendar('julian');
echo $date->format('d M Y'); // 输出 "10 Oct 1581"

若要在Yii中统一处理这类场景,可以扩展formatter组件,添加支持儒略历的自定义格式化方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 20:48:09