找到两个日期之间的差异并将结果保存到数据库中

时间:2017-01-20 12:24:44

标签: laravel-5

我的控制器中有以下代码。我想找到两个日期之间的差异(从和到),这样我就可以得到n之间的天数,将它保存到数据库中。

class LeaveController extends Controller
{
     public function ApplyLeave(Request $request){

        $days = $request->datepicker->diff($request->datepicker1);

    Auth::user()->sent()->create([
        'tel'       => $request->tel,
        'email'    => $request->email,
        'start' => Carbon::parse($request->datepicker),
        'end' => Carbon::parse($request->datepicker1),
        'supervisor'    => $request->supervisor,
        'department' => $request->department,
        'name'    => $request->name,
        'adress' => $request->adress,
        'days' =>   $days,
    ]);   

    return view('home');
}

到目前为止,我得到以下错误:

  

调用字符串

上的成员函数diff()

如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

你需要:

$d1 = new Carbon($request->datepicker);
$d2 = new Carbon($request->datepicker1);
$days = $d1->diff($d2)->days;

请注意,您需要 - >天才能获得实际天数。

请注意,您会遇到时间问题。您可能希望 - > setTime(0,0,0)以获取2个日期之间的日期。

请注意,您的格式可能不是标准格式。在这种情况下使用:

$format = 'm\d\Y';
$d1 = Carbon::createFromFormat($request->datepicker,$format);
$d2 = Carbon::createFromFormat($request->datepicker1,$format);
$days = $d1->diff($d2)->days;

答案 1 :(得分:1)

Man,当基本的PHP函数可以为您提供最佳解决方案时,不要使用Carbon。使用OOP:

$datetime1 = new DateTime($request->datepicker);
$datetime2 = new DateTime($request->datepicker1);
$interval= $datetime1->diff($datetime2);
$days = $interval->format('%a');

如果您好奇为什么会收到该错误,那么因为您正在使用diff()函数,该函数将日期对象作为参数并且您提供了纯字符串。