【问题标题】:Call to a member function format() on string in laravel在 laravel 中调用字符串的成员函数 format()
【发布时间】:2018-10-05 20:05:37
【问题描述】:

我将 fromdatetodate 从视图传递给控制器​​。我想从数据库中打印这些日期之间的日期,但出现如下错误:

Symfony\Component\Debug\Exception\FatalThrowableError (E_ERROR) 调用字符串上的成员函数 format()

我的查看页面

<div class="col-sm-4">
    {!! Form::open (['url' => 'admin/ad']) !!}
    <div class="form-group">
        {!! Form::label('', 'From date') !!}
        {!! Form::date('fromdate', '', ['class' => 'form-control']) !!}
        {!! Form::label('', 'To date') !!}
        {!! Form::date('todate', '', ['class' => 'form-control']) !!}
    </div>
    <div class="form-group">
        {!! Form::submit(('submit'), ['class' => 'btn btn-primary btn-block']) !!}
        {!! Form::close() !!}
    </div>
</div>

我的控制器页面

$report = $request->report;
$fromdate = $request->fromdate; 
$start_date = date("Y-m-d H:i:s", strtotime($fromdate));
$todate = $request->todate;
$end_date = date("Y-m-d H:i:s", strtotime($todate));

$users = Report::whereBetween('created_at', [
    $start_date->format('Y-m-d') . " 00:00:00",
    $end_date->format('Y-m-d') . " 23:59:59"
])->get();

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    使用Carbon 库处理日期解析和格式化:

    $users = Report::whereBetween('created_at', [
        Carbon::parse($request->fromdate)->toDateTimeString(), 
        Carbon::parse($request->todate)->toDateTimeString()
    ])->get();
    

    请参阅 Modifiers 部分了解startOfXXXX 格式:

    $users = Report::whereBetween('created_at', [
        Carbon::parse($request->fromdate)->startOfDay(),  // 2012-01-31 00:00:00
        Carbon::parse($request->todate)->endOfDay()       // 2012-01-31 23:59:59
    ])->get();
    

    【讨论】:

      【解决方案2】:

      好吧,我用

       {{ Carbon\Carbon::parse($object->yourdate_fromdatabase)->format('Y-m-d') }}
      

      【讨论】:

        【解决方案3】:

        放置在您的模型中:

        protected $dates = ['fromdate', 'todate'];
        

        【讨论】:

          【解决方案4】:
          $report = $request->report;
          $fromdate = $request->fromdate; 
          $start_date = date("Y-m-d H:i:s", strtotime($fromdate));
          $todate = $request->todate;
          $end_date = date("Y-m-d H:i:s", strtotime($todate));
          $users = Report::whereBetween('created_at', [$start_date,$end_date])->get();
          

          【讨论】:

            【解决方案5】:

            你也可以使用DateTime

            $report = $request->report;
            $fromdate = $request->fromdate; 
            $start_date = DateTime::createFromFormat("U", strtotime($fromdate));
            $todate = $request->todate;
            $end_date = DateTime::createFromFormat("U", strtotime($todate));
            
            $users = Report::whereBetween('created_at', [
                $start_date->format('Y-m-d') . " 00:00:00", 
                $end_date->format('Y-m-d') . " 23:59:59"
            ])->get(); 
            

            【讨论】:

            • 如果你碰巧是这个答案对我投反对票的人,你能解释一下原因吗?
            猜你喜欢
            • 1970-01-01
            • 2017-03-24
            • 2016-05-10
            • 1970-01-01
            • 2020-03-01
            • 2020-01-08
            • 1970-01-01
            • 2021-07-20
            相关资源
            最近更新 更多