在我的模型中,我有以下内容:
protected $dates = [
'start',
'end',
'created_at',
'updated_at'
];
我正在使用日期时间选择器插入开始和结束日期,格式如下:
2016-01-23 22:00
没有秒。当我这样做时,我收到此错误:
InvalidArgumentException in Carbon.php line 425:
Data missing
at Carbon::createFromFormat('Y-m-d H:i:s', '2016-01-23 22:00') in Model.php line 3015
如果我确实包括秒数,它会起作用。秒对我来说并不重要,我不想将它们包含在我的日期时间选择器字段中。有什么办法可以让我仍然可以将这些字段用作日期字段?
原文由 Hardist 发布,翻译遵循 CC BY-SA 4.0 许可协议
tl;博士
您的日期字符串和您的日期格式不同,您必须更改格式字符串或修改日期字符串以使它们匹配。
解释
问题
当 Carbon 的
createFromFormat
函数接收到与传递的格式字符串不匹配的日期字符串时,会出现此错误。更准确地说,这来自DateTime::createFromFormat
函数,因为 Carbon 只是调用它:没有足够的数据
如果您的日期字符串比这种情况下的格式字符串“短”:
碳会抛出:
数据过多
如果您的日期字符串比这种情况下的格式字符串“长”:
碳会抛出:
在引擎盖下
根据 有关 mutators 的文档, 默认日期格式为:
'Y-m-d H:i:s'
。日期处理发生在 模型的asDateTime
函数 中。在最后一种情况下,调用了getDateFormat
函数,这就是自定义格式的来源。默认格式 在数据库的Grammar
类中定义。解决方案
您必须确保日期字符串与格式字符串匹配。
更改格式字符串
您可以像这样覆盖默认格式字符串:
这种方法有两个问题:
$dates
数组中定义的每个字段。编辑和格式化日期字符串
我推荐的解决方案是日期格式应该保持默认
'Y-m-d H:i:s'
你应该填写日期的缺失部分,如下所示:当你想使用日期时,你应该格式化它:
当然,这些字段应该更改为日期: