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
相关产品推荐
相关产品推荐

