我在我的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插入字段。
我错过了什么?谢谢!
答案 0 :(得分:2)
我正在使用@ CD001中的建议并将日期设置为null。
我现在的迁移是:
$table->timestamp('end_date')->nullable();
然后不是像这样检查9999日期:
if($endDate->year == 9999) {
我这样检查:
if(! $endDate) {
这很有效。谢谢@ CD001!