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
–
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.