DST期间Laravel Carbon无效的日期时间格式错误

时间:2017-08-03 11:31:34

标签: laravel datetime laravel-5.3 dst php-carbon

我正在使用Laravel 5.3并在mysql列中插入datetime,其中使用Carbon从Controller生成值。

我在错误日志中的特定时间内出现了很多错误,如下所示:

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);

我的问题是:

  1. 如何解决上述问题?由于DST,我不希望它输入无效日期?我不想在mysql或服务器中更改时区只是为了解决这个问题。

  2. 我想到的另一个想法是,当调用addDays时,可能会将时间设置为23.59.59,因为这可以避免此错误。对我来说,日期比时间重要。因此,如果我希望addDays中的Carbon设置固定时间,我该怎么办呢?

1 个答案:

答案 0 :(得分:1)

为了得到我作为答案的评论,无论出于何种原因:

因为您关注的是日期而不是时间,您可以设置date_time值,从Carbon到startOfDay(),或者更确切地说,如我对endOfDay()的评论中所述,即:

$invitationDate = Carbon::now()->addDays(60)->endOfDay();

另一种方法是使用日期作为invited_by的列类型,然后您可以避免时间问题(因为您说日期更重要)。