Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

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
                While all those answers are correct, you should specify date and dt to be dates in the corresponding model - see laravel.com/docs/5.7/eloquent-mutators#date-mutators for more information
– Daniel Steiner
                Feb 27, 2019 at 14:18

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.

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

    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.

    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()
    

    If you remove format() carbon format() it will convert string, so remove it,it will works,

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

    Thanks for contributing an answer to Stack Overflow!

    • Please be sure to answer the question. Provide details and share your research!

    But avoid

    • Asking for help, clarification, or responding to other answers.
    • Making statements based on opinion; back them up with references or personal experience.

    To learn more, see our tips on writing great answers.