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

Laravel中使用Jalali日历转换日期时出现Undefined index: year错误,无法存储日期至数据库

解决Jalali日期转换时"Undefined index: year"的错误

这个问题我之前也碰到过,核心原因很明确:你传入的日期字符串是波斯数字(比如۱۴۰۰、۰۳),但Morilog\Jalali\Jalalian::fromFormat()方法默认是基于阿拉伯数字(0-9)来解析日期格式的,它没办法识别波斯数字,解析失败后就会触发Undefined index: year这个错误。

解决方案:先把波斯数字转换成阿拉伯数字

你可以先写一个简单的转换函数,把日期里的波斯数字替换成阿拉伯数字,再传给Jalalian处理:

// 波斯数字转阿拉伯数字的辅助函数
function convertPersianToArabic($string) {
    $persianDigits = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];
    $arabicDigits = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
    return str_replace($persianDigits, $arabicDigits, $string);
}

// 你的原日期
$pdate = "۱۴۰۰/۰۳/۲۹";
// 转换为阿拉伯数字格式的日期
$standardDate = convertPersianToArabic($pdate);
// 现在再执行转换就不会报错了
$carbonDate = \Morilog\Jalali\Jalalian::fromFormat('Y/m/d', $standardDate)->toCarbon();

验证结果

你可以用var_dump($carbonDate)来检查转换后的结果,应该能得到一个有效的Carbon实例,里面包含正确的公历日期信息。

额外说明

之所以会出现这个错误,是因为当Jalalian无法正确解析传入的日期字符串时,它内部的解析逻辑会失败,返回的数组里不存在year这个键,代码后续调用时就会触发Undefined index的警告/错误。所以只要确保传入的日期是组件能识别的阿拉伯数字格式,问题就解决了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 20:02:34