Laravel Carbon date diffInDays() on string error

别来无恙 提交于 2019-12-02 19:21:04

问题


I need to find the difference between the two dates. Say i have 2017-02-01 - 2017-01-01. The number of days between the two days is the output

$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);

If I give the above code I get the error as

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

回答1:


Carbon format() function will convert to string so remove format('Y-m-d') like this:

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

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

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

Hope you understand. You can see docs here.




回答2:


Not tested but try this:

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



回答3:


You can do in this way,

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

First get the difference from two dates and then format the date.




回答4:


You can only use the diffInDays() function on a Carbon instance at before date format apply.

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

Now you should be able to compare:

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

if you want to apply date format, try below for compare them:

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

Check this document for further detail.




回答5:


You are having this problem because you stored your date as string in the database. You can perform diffInDays($updated_at) or diffInDays($created_at) on the original laravel's created_at and updated_at because Laravel already stores them as dates by default so, when you are fetching them from the database, laravel gives it to you as a carborn instance (try dd($created_at)).

To solve your problem, go to your model and use this to convert your date column to dates

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

Then, you can now do

$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);

OR You can use

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



回答6:


Make sure to use Carbon\Carbon;

  • You can use diffInDays for days.
  • You can use diffInHours for Hours.
  • You can use diffInMinutes for Minutes.
  • You can use DiffInSeconds for Seconds.

    $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;


来源:https://stackoverflow.com/questions/45858410/laravel-carbon-date-diffindays-on-string-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!