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

Laravel 5.5更新含2018-03-25时间时报错:Incorrect datetime value

问题成因分析

嘿,这个问题我之前处理过类似的情况,核心原因是夏令时(DST)切换导致的无效时间点,结合你的场景具体拆解如下:

  • 时间点本身在对应时区不存在
    2018年3月25日是欧盟及欧洲多数国家的夏令时切换日:当地时间凌晨2:00会被直接拨快1小时到3:00,也就是说2018-03-25 02:00:00 至 02:59:59 这个时间段在当地时区中是完全不存在的。
    你报错的是2018-03-25 03:00:00,大概率是时区转换冲突导致的:

    • 如果你的Laravel应用用的是实行夏令时的时区(比如Europe/Paris、Europe/London),而MySQL服务器用的是UTC或其他非夏令时时区,当应用把本地时间转成数据库时区时,夏令时的切换规则会让这个时间被判定为无效。
    • 反过来,如果数据库时区是夏令时时区,而应用生成时间时没正确适配切换规则,也会触发这个错误。
  • MySQL Timestamp类型的严格校验
    你的done_date字段是timestamp类型,MySQL对这个类型的时间处理有严格的有效性校验:

    • 存储时会把时间转成UTC时间保存
    • 读取时再转回数据库当前时区的时间
      一旦传入的时间在数据库对应的时区里是不存在的(比如夏令时跳过的时间段),MySQL就会直接抛出Incorrect datetime value的错误。
  • 额外排查小细节
    从报错的SQL里能看到done_date = 2018-03-25 03:00:00,这个时间值没有被单引号包裹。虽然Laravel的查询构建器通常会自动给字符串参数加引号,但如果你的代码里是用原生表达式或者手动拼接的SQL,MySQL会把它解析成数学运算(2018-3-25=1990,再拼接后面的时间部分),最终生成无效的datetime值。不过你说其他时间更新正常,这个可能性相对低,但可以检查下处理done_date的代码逻辑有没有手动拼SQL的情况。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:47:31