PHP Carbon& MySQL插入9999-31-12到表中最终作为0000-00-00

时间:2016-08-24 15:22:04

标签: php mysql date

我在我的PHP7 / Laravel 5.2 / MySql 5.7项目中使用Carbon来操作我的日期。

我正在尝试将日期9999-12-31 23:59:59插入时间戳字段,但在插入时它会解析为全部为零。

我的迁移会像这样创建列:

$table->timestamp('end_date');

我的代码会生成如下日期:

$endDate = Carbon::create(9999, 12, 31, 23, 59, 59);
然后我将它插入表中,如下所示:

 ClientSubscription::create([
     'end_date' => $endDate,
 ])->save();

我可以看到(通过迁移期间的屏幕转储)日期作为Carbon实例正确生成,如下所示:

ED= : {
    "date": "9999-12-31 23:59:59.000000",
    "timezone_type": 3,
    "timezone": "UTC"
}

然而,查询我的表的结果是:

0000-00-00 00:00:00

在插入Carbon之前,我谨慎处理这个日期,因此我会在生成日期后立即复制该日期,然后使用副本计算期间等。

所有其他计算日期(与此日期不同)使用相同的创建例程将OK插入字段。

我错过了什么?谢谢!

1 个答案:

答案 0 :(得分:2)

我正在使用@ CD001中的建议并将日期设置为null。

我现在的迁移是:

$table->timestamp('end_date')->nullable();

然后不是像这样检查9999日期:

if($endDate->year == 9999) {

我这样检查:

if(! $endDate) {

这很有效。谢谢@ CD001!