DateTime::__construct(): 无法在位置 0 (2) 解析时间字符串 (2): 中的意外字符
Posted
技术标签:
【中文标题】DateTime::__construct(): 无法在位置 0 (2) 解析时间字符串 (2): 中的意外字符【英文标题】:DateTime::__construct(): Failed to parse time string (2) at position 0 (2): Unexpected character in 【发布时间】:2020-10-16 22:27:39 【问题描述】:在我的 Laravel 5.8 项目中,当用户提交表单以创建新帖子时,出现此错误:
[2020-06-26 09:16:52] production.ERROR: Exception: DateTime::__construct(): Failed to parse time string (2) at position 0 (2): Unexpected character in /var/www/html/laravelapp/vendor/nesbot/carbon/src/Carbon/Traits/Creator.php:81
Stack trace:
#0 /var/www/html/laravelapp/vendor/nesbot/carbon/src/Carbon/Traits/Creator.php(81): DateTime->__construct('2', Object(Carbon\CarbonTimeZone))
#1 /var/www/html/laravelapp/vendor/nesbot/carbon/src/Carbon/Traits/Creator.php(174): Carbon\Carbon->__construct('2', NULL)
#2 /var/www/html/laravelapp/vendor/nesbot/carbon/src/Carbon/Traits/Creator.php(201): Carbon\Carbon::rawParse('2', NULL)
#3 /var/www/html/laravelapp/app/Http/Controllers/Appraisal/AppraisalGoalsController.php(333): Carbon\Carbon::parse('2')
#4 [internal function]: App\Http\Controllers\Appraisal\AppraisalGoalsController->store(Object(App\Http\Requests\Appraisal\AppraisalGoal\StoreAppraisalGoalRequest))
型号
受保护的 $fillable = [ '姓名', '开始日期', '结束日期', ];
protected $dates = [
'start_date',
'end_date'
];
请求规则:
'start_date.*' => [
'required',
'date',
'date_format:Y-m-d',
],
'end_date.*' => [
'required',
'date',
'date_format:Y-m-d',
'after:start_date.*'
],
控制器
foreach(Arr::wrap($request->activity) as $key => $activity)
$startDate = Carbon::parse($request->start_date[$key]);
$endDate = Carbon::parse($request->end_date[$key]);
$goaldetail = new AppraisalGoalDetail();
$goaldetail->start_date = $startDate ->toDateString();
$goaldetail->end_date = $endDate->toDateString();
$goaldetail->save();
查看:
<td>
<input type="date" name="start_date[]" placeholder="dd/mm/yyyy" class="form-control start_date" min="Carbon\Carbon::now()->firstOfYear()->format('Y-m-d')" max="Carbon\Carbon::now()->lastOfYear()->format('Y-m-d')">
</td>
<td>
<input type="date" name="end_date[]" placeholder="dd/mm/yyyy" class="form-control end_date" min="Carbon\Carbon::now()->firstOfYear()->format('Y-m-d')" max="Carbon\Carbon::now()->lastOfYear()->format('Y-m-d')">
</td>
我该如何解决这个问题?
【问题讨论】:
【参考方案1】:在循环中记录 $request->start_date[$key] 并检查 storage/logs 中的日志文件以查看结果。
\Log::info($request->start_date[$key]);
Carbon::parse() 函数未按预期格式接收数据。
另外,删除变量名和 ->toDateString() 函数前面的空格
$startDate ->toDateString();
【讨论】:
以上是关于DateTime::__construct(): 无法在位置 0 (2) 解析时间字符串 (2): 中的意外字符的主要内容,如果未能解决你的问题,请参考以下文章
PHP DateTime::__construct():当年份为三位数字时,无法解析时间字符串
错误500:DateTime :: __ construct():无法解析时间字符串