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

Laravel Eloquent模型存入数据库时日期日月颠倒问题排查求助

解决方案

该问题核心是数据库默认的日期字符串解析规则和Laravel生成的日期格式不匹配,从查询日志的方括号语法判断,大概率使用的是SQL Server类数据库,这类数据库部分版本会默认将Y-m-d格式的字符串优先按Y-d-m规则解析,最终导致月份和日期错位。可以按以下步骤修复:

步骤1:修改数据库连接配置(优先推荐)

打开项目config/database.php文件,找到你正在使用的数据库连接配置项(以SQL Server的sqlsrv连接为例),新增date_format配置,指定为无分隔符的通用安全日期格式,这种格式不会出现解析歧义:

'sqlsrv' => [
    // 保留原有host、port、database等配置不变
    'date_format' => 'Ymd His',
],

修改后删除之前在模型中单独添加的$dateFormat属性和getDateFormat()方法,避免配置优先级冲突。

步骤2:特殊场景兼容方案

如果使用的是Oracle、Access等其他有自定义日期格式要求的数据库,可通过模型修改器统一处理日期字段的写入格式:

// 在T_Appro模型中添加如下方法,按数据库实际可识别的格式调整format参数即可
public function setDATESTATUTAttribute($value)
{
    $this->attributes['DATESTATUT'] = $value instanceof \DateTime ? $value->format('d/m/Y H:i:s') : $value;
}

// 原生维护的S_MODDATE字段也可通过修改器统一处理
public function setSMODDATEAttribute($value)
{
    $this->attributes['S_MODDATE'] = $value instanceof \DateTime ? $value->format('d/m/Y H:i:s') : $value;
}

修改后重新测试写入即可解决日期错位问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:24:02