Laravel 碳日期 diffInDays() 字符串错误

Laravel Carbon date diffInDays() on string error

我需要找出两个日期之间的差异。假设我有 2017-02-01 - 2017-01-01。两天之间的天数就是输出

$formatted_dt1=Carbon::parse($a->date)->format('Y-m-d');
$formatted_dt2=Carbon::parse($c->dt)->format('Y-m-d');
$date_diff=$formatted_dt1->diffInDays($formatted_dt2);

如果我给出上面的代码,我得到的错误是

FatalThrowableError in ReportsController.php line 67:
Call to a member function diffInDays() on string

Carbon format() 函数将转换为字符串,因此像这样删除 format('Y-m-d')

$formatted_dt1=Carbon::parse($a->date);

$formatted_dt2=Carbon::parse($c->dt);

$date_diff=$formatted_dt1->diffInDays($formatted_dt2);

希望你明白。您可以查看文档 here.

未测试但试试这个:

$formatted_dt1=Carbon::parse($a->date);
$formatted_dt2=Carbon::parse($c->dt);
$date_diff=$formatted_dt1->diffInDays($formatted_dt2);

你可以这样做,

$formatted_dt1=Carbon::parse($a->date);
$formatted_dt2=Carbon::parse($c->dt);
$date_diff=$formatted_dt1->diffInDays($formatted_dt2)->format('Y-m-d');

先求出两个日期的差值,然后格式化日期。

您只能在日期格式应用之前在 Carbon 实例上使用 diffInDays() 函数。

$formatted_dt1=Carbon::parse($a->date);
$formatted_dt2=Carbon::parse($c->dt);

现在你应该可以比较了:

$date_diff=$formatted_dt1->diffInDays($formatted_dt2);

如果您想应用日期格式,请尝试以下比较:

$date_diff=$formatted_dt1->diffInDays($formatted_dt2)->format('Y-m-d');

查看此 document 了解更多详细信息。

您遇到此问题是因为您将日期作为字符串存储在数据库中。您可以对原始 laravel 的 created_atupdated_at 执行 diffInDays($updated_at)diffInDays($created_at) 因为 Laravel 已经默认将它们存储为日期,所以,当您从数据库中获取它们时,laravel 将其作为 carborn 实例提供给您(尝试 dd($created_at))。

要解决您的问题,请转到您的模型并使用它将您的日期列转换为日期

protected $dates = [
'my_date',
'my_other_date'
]

那么,你现在可以做

$formatted_dt1=Carbon::parse($a->date)->format('Y-m-d');
$formatted_dt2=Carbon::parse($c->dt)->format('Y-m-d');
$date_diff=$formatted_dt1->diffInDays($formatted_dt2);

或者您可以使用

Carbon\Carbon::parse($formatted_dt1)->diffInDays()

确保 use Carbon\Carbon;

  • 您可以使用 diffInDays
  • 您可以使用 diffInHours 小时
  • 您可以使用 diffInMinutes 分钟
  • 您可以使用 DiffInSeconds

    $formatted_dt1=Carbon::parse('2019-09-26 00:00:00');
    $formatted_dt2=Carbon::parse('2019-09-28 00:00:00');


    $date_diff=$formatted_dt1->diffInDays($formatted_dt2);
    echo $date_diff.' Day '; //2 days


    $hours_diff = $formatted_dt1->diffInHours($formatted_dt2); 
    echo $date_diff.' Hours '; //48 Hours 


    $Minutesdiff = $formatted_dt1->diffInMinutes($formatted_dt2); 
    echo $Minutesdiff.' Minutes '; //2880 Minutes



    $seconddiff = $formatted_dt1->DiffInSeconds($formatted_dt2); 
    echo $seconddiff.' Seconds '; //172800  Seconds
    exit;

如果你删除 format() carbon format() 它会转换字符串,所以删除它,它会起作用,

$formatted_dt1=Carbon::parse($a->date);
$formatted_dt2=Carbon::parse($c->dt);
$date_diff=$formatted_dt1->diffInDays($formatted_dt2);