我无法在 mysql 数据库中保存特定的日期时间值

I cannot save a specific datetime value in mysql database

提问人:altiinberiisha 提问时间:11/16/2023 最后编辑:altiinberiisha 更新时间:11/16/2023 访问量:69

问:

当我尝试更新项目时,出现以下错误:

Illuminate\Database\QueryException SQLSTATE[22007]:日期时间格式无效:1292 日期时间值不正确:第 1 行“posted_at”列的日期时间值“2023-03-26 02:36:24”(SQL:更新集 = 2023-03-26 02:36:24,. = 2023-11-16 10:14:52,其中 = 934579)table_nameposted_attable_nameupdated_atid

列类型是时间戳,它被强制转换为日期时间,以前从未遇到过这个问题,只有这个值崩溃了。

我什么也没尝试,因为它是一个普通的日期时间字符串。

php mysql 拉维尔

评论

1赞 P.Salmon 11/16/2023
时钟什么时候在你所在的地方前进?
0赞 altiinberiisha 11/16/2023
2023 年实际上是 26 年 3 月 ...
0赞 Hasan Raza 11/16/2023
您尝试插入“posted_at”列的日期时间值的格式问题
0赞 altiinberiisha 11/16/2023
@HasanRaza我尝试过“2023-03-27 02:36:24”、“2023-03-25 02:36:24”和“2023-03-26 15:36:24”,它们都可以工作,而且我没有手动输入,这是一个从 API 获取值的更新。
0赞 Hasan Raza 11/17/2023
在更新查询中将日期时间值括在单引号中

答:

2赞 Endrit Maxharraj 11/16/2023 #1

如果错误是由于日期时间值(如落在夏令时 (DST) 转换小时)而发生的,则可能是因为本地时间中不存在此特定时间。2023-03-26 02:36:24

在 DST 更改期间,通常在 3 月,时钟会向前移动一小时,跳过 .02:0002:59

溶液:

将这些日期时间值调整为超出 DST 转换时间。例如,您可以在这些时间上增加一个小时以使其有效。在应用程序中,实现对 DST 转换周期的检查,并自动调整此跳过的一小时内的任何日期时间值。

此方法可确保时间戳保持一致且有效,即使在 DST 更改期间也是如此。

评论

0赞 altiinberiisha 11/16/2023
您将如何在 Laravel 应用程序中执行此操作以处理所有情况?我不认为在每个实例上添加 if 语句是处理它的最佳方法!
1赞 Álvaro González 11/16/2023
@altiinberiisha 如果您的 PHP 应用程序正确处理时区,您应该能够事先验证或修复日期:3v4l.org/QivQX(请参阅未报告错误,但日期会自动修复)。我不知道Laravel如何处理日期。
0赞 P.Salmon 11/16/2023
这看起来很像 AI 生成的答案,以至于不太可能回答后续问题。您可能希望提出一个关于 laravel/php dst 管理的具体问题。
0赞 altiinberiisha 11/16/2023
@ÁlvaroGonzález这是我从特定 api '2023-03-26T02:27:20+0000' 收到的值,并且我的 php 应用程序具有 UTC 时区,这意味着 $date = new \DateTime('2023-03-26T02:27:20+0000', new \DateTimeZone('UTC'));输出相同的日期时间。
0赞 Álvaro González 11/16/2023
如果MySQL不使用UTC,则需要将该日期转换为本地时区。否则,您将实际的 UTC 日期存储为本地日期。