Laravel Carbon在字符串错误时约会diffInDays()

时间:2017-08-24 09:50:43

标签: php laravel laravel-5 php-carbon

我需要找到两个日期之间的区别。说我有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

7 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

未经测试但请尝试此操作:

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

答案 2 :(得分:1)

你可以这样做,

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

首先从两个日期中获取差异,然后格式化日期。

答案 3 :(得分:0)

您只能在应用日期格式之前在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以获取更多详细信息。

答案 4 :(得分:0)

您遇到了此问题,因为您将日期存储为字符串在数据库中。您可以在原始laravel的diffInDays($updated_at)diffInDays($created_at)上执行created_atupdated_at,因为Laravel默认已经将它们存储为日期,因此,当您从数据库中获取它们时,laravel将其作为出生实例提供给您(尝试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()

答案 5 :(得分:0)

请确保use Carbon\Carbon;

  • 您可以在{strong>天内使用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;

答案 6 :(得分:0)

如果删除 format() carbon format() 它将转换字符串,因此删除它,它会起作用,

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