提问人:altiinberiisha 提问时间:11/16/2023 最后编辑:altiinberiisha 更新时间:11/16/2023 访问量:69
我无法在 mysql 数据库中保存特定的日期时间值
I cannot save a specific datetime value in mysql database
问:
当我尝试更新项目时,出现以下错误:
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_name
posted_at
table_name
updated_at
id
列类型是时间戳,它被强制转换为日期时间,以前从未遇到过这个问题,只有这个值崩溃了。
我什么也没尝试,因为它是一个普通的日期时间字符串。
答:
2赞
Endrit Maxharraj
11/16/2023
#1
如果错误是由于日期时间值(如落在夏令时 (DST) 转换小时)而发生的,则可能是因为本地时间中不存在此特定时间。2023-03-26 02:36:24
在 DST 更改期间,通常在 3 月,时钟会向前移动一小时,跳过 .02:00
02: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 日期存储为本地日期。
评论