Har*_*ist 25 php format laravel php-carbon
在我的模型中,我有以下内容:
protected $dates = [
'start',
'end',
'created_at',
'updated_at'
];
Run Code Online (Sandbox Code Playgroud)
我使用日期时间选择器以这种格式插入开始和结束日期:
2016-01-23 22:00
Run Code Online (Sandbox Code Playgroud)
没有秒.当我这样做时,我收到此错误:
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
Run Code Online (Sandbox Code Playgroud)
如果我确实包括秒,它就可以了.秒对我来说并不重要,我不想将它们包含在我的日期时间选择器字段中.任何方式,所以我仍然可以使用这些字段作为日期字段?
tot*_*dli 62
您的日期字符串和日期格式不同,您必须更改格式字符串或修改日期字符串以使它们匹配.
当Carbon的createFromFormat函数接收到与传递的格式字符串不匹配的日期字符串时,会出现此错误.更确切地说,这来自于DateTime::createFromFormat函数,因为Carbon只是称之为:
public static function createFromFormat($format, $time, $tz = null)
{
if ($tz !== null) {
$dt = parent::createFromFormat($format, $time, static::safeCreateDateTimeZone($tz));
} else {
$dt = parent::createFromFormat($format, $time); // Where the error happens.
}
if ($dt instanceof DateTime) {
return static::instance($dt);
}
$errors = static::getLastErrors();
throw new InvalidArgumentException(implode(PHP_EOL, $errors['errors'])); // Where the exception was thrown.
}
Run Code Online (Sandbox Code Playgroud)
如果您的日期字符串比格式字符串"更短",如下例所示:
Carbon::createFromFormat('Y-m-d H:i:s', '2017-01-04 00:52');
Run Code Online (Sandbox Code Playgroud)
碳会抛出:
Carbon.php第425行中的InvalidArgumentException:
数据缺失
如果你的日期字符串比格式字符串"更长",就像这种情况一样:
Carbon::createFromFormat('Y-m-d H:i', '2017-01-02 00:27:00');
Run Code Online (Sandbox Code Playgroud)
碳会抛出:
Carbon.php第425行中的InvalidArgumentException:
尾随数据
根据mutators的文档,默认日期格式为:'Y-m-d H:i:s'.日期处理发生在Model的asDateTime函数中.在最后一个条件中调用该getDateFormat函数,即自定义格式的来源.默认格式在Database的Grammar类中定义.
您必须确保日期字符串与格式字符串匹配.
您可以覆盖默认格式字符串,如下所示:
class Event extends Model {
protected $dateFormat = 'Y-m-d H:i';
}
Run Code Online (Sandbox Code Playgroud)
这种方法存在两个问题:
$dates数组中定义的每个字段.我推荐的解决方案是日期格式应该保持默认值'Y-m-d H:i:s',你应该完成日期的缺失部分,如下所示:
public function store(Request $request) {
$requestData = $request->all();
$requestData['start_time'] .= ':00';
$requestData['end_time'] .= ':00';
$event = new Event($requestData);
$event->save();
}
Run Code Online (Sandbox Code Playgroud)
当你想使用日期时,你应该格式化它:
public function show(Request request, $eventId) {
$event = Event::findOrFail($eventId);
$startTime = $event->start_time->format('Y-m-d H:i');
$endTime = $event->end_time->format('Y-m-d H:i');
}
Run Code Online (Sandbox Code Playgroud)
当然这些字段应该变换为日期:
class Event extends Model {
protected $dates = [
'start_time',
'end_time',
'created_at',
'updated_at',
'deleted_at',
];
}
Run Code Online (Sandbox Code Playgroud)
小智 5
此功能已禁用,Datetimes 中的 carbon 模拟 https://laravel.com/docs/5.0/eloquent#date-mutators
public function getDates()
{
return [];
}
Run Code Online (Sandbox Code Playgroud)