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 -&gt;toDateString();

【讨论】:

以上是关于DateTime::__construct(): 无法在位置 0 (2) 解析时间字符串 (2): 中的意外字符的主要内容,如果未能解决你的问题,请参考以下文章

PHP DateTime::__construct():当年份为三位数字时,无法解析时间字符串

错误500:DateTime :: __ construct():无法解析时间字符串

PHP DateTime 类命名空间

Codeigniter 2 index和__construct之间的区别以及__construct中的内容

__construct()和__initialize()

_initialize() 区别 __construct()