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_at
和 updated_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);
我需要找出两个日期之间的差异。假设我有 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_at
和 updated_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);