Laravel Carbon 在 DST 期间出现无效的日期时间格式错误
Laravel Carbon Invalid Datetime Format Error during DST
我正在使用 Laravel 5.3 并在 mysql 列中插入 datetime
,其中值是使用 Carbon 从控制器生成的。
在特定时间我的错误日志中有很多这样的错误:
Next Illuminate\Database\QueryException: SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '2017-10-01 02:29:54' for column 'invite_at' at row 1 (SQL: insert into `wedding_invitations` (`name`, `email`, `invite_at`, `updated_at`, `created_at`) values (Donald Trump, trump@donald.com, 2017-10-01 02:29:54, 2017-08-02 02:29:54, 2017-08-02 02:29:54)) in /home/myapp/applications/weddingapp/vendor/laravel/framework/src/Illuminate/Database/Connection.php:770
我发现问题不是日期格式,因为 2017-10-01 02:29:54
是有效的 sql 格式。在深入研究并阅读 SO 中的其他答案后,我发现我的服务器时间设置为 AEST
并且我认为错误发生在 10 月 1 日凌晨 2 点 - 2.59.59 之间的时间不存在由于节电。这可能就是我收到此错误的原因。
invite_at
日期在我的控制器中创建如下:
$invitationDate = Carbon::now()->addDays(60);
我的问题是:
如何解决上述问题?因为我不希望它因 DST 而输入无效日期?我不想为了解决这个问题而更改 mysql 或服务器中的时区。
我想到的另一个想法是,当调用addDays
时,也许将时间设置为23.59.59
,因为这样可以避免这个错误。对我来说,日期比时间重要。那么如果我想让Carbon
中的addDays
设置一个固定的时间,我该怎么做呢?
无论出于何种原因,为了让我发表的评论作为答案:
因为您更关心日期而不是时间,所以您可以将从 Carbon 获得的 date_time 值设置为 startOfDay()
,或者更确切地说,如我对 endOfDay()
的评论所述,即:
$invitationDate = Carbon::now()->addDays(60)->endOfDay();
另一种方法是简单地使用日期作为 invited_by
的列类型,这样就可以避免时间问题(因为你说日期更重要)。
我正在使用 Laravel 5.3 并在 mysql 列中插入 datetime
,其中值是使用 Carbon 从控制器生成的。
在特定时间我的错误日志中有很多这样的错误:
Next Illuminate\Database\QueryException: SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '2017-10-01 02:29:54' for column 'invite_at' at row 1 (SQL: insert into `wedding_invitations` (`name`, `email`, `invite_at`, `updated_at`, `created_at`) values (Donald Trump, trump@donald.com, 2017-10-01 02:29:54, 2017-08-02 02:29:54, 2017-08-02 02:29:54)) in /home/myapp/applications/weddingapp/vendor/laravel/framework/src/Illuminate/Database/Connection.php:770
我发现问题不是日期格式,因为 2017-10-01 02:29:54
是有效的 sql 格式。在深入研究并阅读 SO 中的其他答案后,我发现我的服务器时间设置为 AEST
并且我认为错误发生在 10 月 1 日凌晨 2 点 - 2.59.59 之间的时间不存在由于节电。这可能就是我收到此错误的原因。
invite_at
日期在我的控制器中创建如下:
$invitationDate = Carbon::now()->addDays(60);
我的问题是:
如何解决上述问题?因为我不希望它因 DST 而输入无效日期?我不想为了解决这个问题而更改 mysql 或服务器中的时区。
我想到的另一个想法是,当调用
addDays
时,也许将时间设置为23.59.59
,因为这样可以避免这个错误。对我来说,日期比时间重要。那么如果我想让Carbon
中的addDays
设置一个固定的时间,我该怎么做呢?
无论出于何种原因,为了让我发表的评论作为答案:
因为您更关心日期而不是时间,所以您可以将从 Carbon 获得的 date_time 值设置为 startOfDay()
,或者更确切地说,如我对 endOfDay()
的评论所述,即:
$invitationDate = Carbon::now()->addDays(60)->endOfDay();
另一种方法是简单地使用日期作为 invited_by
的列类型,这样就可以避免时间问题(因为你说日期更重要)。