How to exact difference between 2 dates in php - php

I want to find difference between 2 dates in php.But I am not getting exact difference.
please help me.
The output I must get as "2 years 0 months 0 days".
But I am getting as "1 years 12 months and 4 days".
where I am wrong?
$createddate="2015-12-24";
//find difference between the dates present-createddate of user
$now = time(); // present time
$your_date = strtotime($createddate);
$difference = abs($now - $your_date);
echo $difference;
// Years, months and days version
$years = floor($difference / (365*60*60*24));
//echo $years;
$months = floor(($difference - $years * 365*60*60*24) / (30*60*60*24));
//echo $months;
$days = floor(($difference - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
//echo $days;
$membersince .= $years.' years '.$months.' months and '.$days.' days';

<?php
$datetime1 = new DateTime();
$datetime2 = new DateTime('2015-12-24');
$interval = $datetime1->diff($datetime2);
$elapsed = $interval->format('%y years, %m months, %d days');
echo $elapsed;
See it in action

Related

How to include last day when using date_diff?

From Apr 13 to May 12, including the last day, the day difference would be 30 days.
But if I use date_diff, I get only 29 days. How do I include the last day? Do I simply add one more day or is there a more elegant solution?
yes you need to include at the last day like you provided link of 30 day because in php date_diff no issue , please again check your reference link there is also option like include end date in calculation (1 day is added)
PHP date_diff not include last day in calculation default so you need to specify it manual
php date_diff no issue because I have added belo four sample to also calculate date different
note: in below example also need to add one more day if need
#1 example
$date1 = date_create('2022-04-13');
$date2 = date_create('2022-05-12');
$dateDifference = date_diff($date1, $date2)->format('%y years, %m months and %d days');
echo $dateDifference;
#2 example
$date1 = date_create('2022-04-13');
$date2 = date_create('2022-05-12');
$diff=date_diff($date1,$date2);
$months = $diff->format("%m months");
$years = $diff->format("%y years");
$days = $diff->format("%d days");
echo $years .' '.$months.' '.$days;
#3 example
$date1 = date_create('2022-04-13');
$date2 = date_create('2022-05-12');
$diff1 = date_diff($date1,$date2);
print_r($diff1);
#4 example
$date1 = '2022-04-13';
$date2 = '2022-05-12';
$diff = abs(strtotime($date2) - strtotime($date1));
$years = floor($diff / (365*60*60*24));
$months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
printf("%d years, %d months, %d days\n", $years, $months, $days);

Difference between two dates in php using Leap Year

Hey I am trying to get total months from two dates in php. I have searched about leap year calculations between two dates everywhere on internet but did not find the answer.
If my input is "2019-01-01" to "2019-03-31" then the result i expected is 3 months but result i get is 2 month.
Following is my code .
$date1 = strtotime("2019-01-01");
$date2 = strtotime("2019-02-28");
$diff = abs($date2 - $date1);
$years = floor($diff / (365*60*60*24));
$months = floor(($diff - $years * 365*60*60*24)
/ (30*60*60*24));
printf("%d months",$months);
where am i going wrong
I Understand Your Problem..
Actually the result you are getting is correct,because day ends at night 12pm and you are checking at day time.So until day ends you cant get complete month.If You add one day and check you will get correctly 3 Months
Below I Made Some Changes to Your Code..
$new_date = date('Y-m-d', strtotime('2019-02-28' . ' +1 day'));
$date1 = strtotime("2019-01-01");
$date2 = strtotime($new_date);
$diff = abs($date2 - $date1);
$years = floor($diff / (365*60*60*24));
$months = floor(($diff - $years * 365*60*60*24)
/ (30*60*60*24));
printf("%d months",$months);
You can Also Get it by Mysql querying to server
SELECT TIMESTAMPDIFF(MONTH, '2019-01-01', (SELECT DATE_ADD('2019-02-28', INTERVAL 1 DAY))) as month
You can Try it.Hope it Helps.
Your math calculates the number of months between the two dates, exclusive of the ending month.
Add 1 to the total, like so.
$months = (floor(($diff - $years * 365*60*60*24)
/ (30*60*60*24))) +1;
You can try the following:
$date1 = "2019-01-01";
$date2 = "2019-02-28";
$timestamp1 = strtotime($date1);
$timestamp2 = strtotime($date2);
$year1 = date('Y', $timestamp1);
$year2 = date('Y', $timestamp2);
$month1 = date('m', $timestamp1);
$month2 = date('m', $timestamp2);
$diff = (($year2 - $year1) * 12) + ($month2 - $month1);
printf("%d months",$diff);
Try it here: http://sandbox.onlinephpfunctions.com/code/496a08612489977e9e23e8ef3ea07ba991bc5e23
You have to add extra month in your $month variable
$date1 = strtotime("2019-01-01");
$date2 = strtotime("2019-03-31");
$diff = abs($date2 - $date1);
$years = floor($diff / (365*60*60*24));
$months = floor(($diff - $years * 365*60*60*24)
/ (30*60*60*24)) +1 ;
printf("%d months",$months); //Output : give add one extra
OR
$date1 = date_create('2019-01-01');
$date2 date_create('2019-03-31');
$interval= date_diff($date1, $date1);
echo $interval->format('%m months');

Get time past between two dates [duplicate]

This question already has answers here:
How to calculate the difference between two dates using PHP?
(34 answers)
Closed 4 years ago.
I used the following code to find out the time past between two dates:
$date1 = "1900-00-00";
$date2 = "2000-00-00";
$diff = abs(strtotime($date2) - strtotime($date1));
$years = floor($diff / (365*60*60*24));
$months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
printf("%d years, %d months, %d daysn", $years, $months, $days);
But this prints 100 years, 0 months, 24 daysn, instead of 100 years, 0 months, 0 daysn
What is going on?
You can use the DateTime::diff method of the DateTime class to get the difference between two dates. You don't need to calculate the difference yourself:
<?php
$date1 = "1900-00-00";
$date2 = "2000-00-00";
$dt1 = new DateTime($date1);
$dt2 = new DateTime($date2);
$diff = $dt1->diff($dt2);
printf("%d years, %d months, %d days", $diff->y, $diff->m, $diff->d);
//output: 100 years, 0 months, 0 days
You can also use the procedural style to get and output the difference in two lines:
$diff = date_diff(new DateTime("1900-00-00"), new DateTime("2000-00-00"));
printf("%d years, %d months, %d days", $diff->y, $diff->m, $diff->d);
//output: 100 years, 0 months, 0 days
demo: https://ideone.com/rosaJJ
Here is the easiest solution :-
$date1 = "1900-00-00";
$date2 = "2000-00-00";
$expDate = date_create($date2);
$todayDate = date_create($date1);
$diff = date_diff($todayDate, $expDate);
printf("%d years, %d months, %d days", $diff->y, $diff->m, $diff->d);
You will get your expected result .

php compare difference between two dates

Im trying to return the difference between 2 dates, i'm working according to the example found on stackoverflow
My Problem? Im getting completely the wrong results returned, the following code returns 30 years, 0 months, 9 days, when it should obviously be only 7 days or 1 week.
Code follows below:
date_default_timezone_set('America/Los_Angeles');
$pickupDate = '2016-10-13';
$returnDate = 2016-10-20;
$diff = abs(strtotime($pickupDate) - strtotime($returnDate));
$years = floor($diff / (365*60*60*24));
$months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
printf("%d years, %d months, %d days\n", $years, $months, $days);
Any input appreciated
just put single quote in return date like $returnDate = '2016-10-20'; and you can use date_diff() function of php like,
$daysdiffernce = date_diff(date_create('2016-10-13'),date_create('2016-10-20'));
echo $daysdiffernce->format("%R%a days");
and this will give exactly +7days answer
First, the code doesn't take into account leap years, varying length of months and things like that.
There is actually a function in php for this, please check the link for details: http://php.net/manual/en/datetime.diff.php , and an example taken:
$datetime1 = new DateTime('2016-10-13');
$datetime2 = new DateTime('2016-10-20');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%y years, %m months, %d days');
Try this, it will give you differ in date, and , time, minutes, hour ,second ,and etc.
date_default_timezone_set('America/Los_Angeles');
$now = '2016-10-13';
$returnDate = '2016-10-20';
$start = date_create($returnDate);
$end = date_create($now);
$diff=date_diff($end,$start);
print_r($diff);
DEMO
From the manual
$pickupDate = new DateTime('2016-10-13');
$returnDate = new DateTime('2016-10-20');
$interval = $pickupDate->diff($returnDate);
echo $interval->format('%R%a days');
http://php.net/manual/en/datetime.diff.php
date_default_timezone_set('America/Los_Angeles');
$pickupDate = '2016-10-13';
$returnDate = '2016-10-20'; //use signle quote same as pickupDate
$diff = abs(strtotime($returnDate) - strtotime($pickupDate)); // change the order
$years = floor($diff / (365*60*60*24));
$months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
printf("%d years, %d months, %d days\n", $years, $months, $days);
Thanks

Difference in UK Dates [duplicate]

This question already has answers here:
How to calculate the difference between two dates using PHP?
(34 answers)
Closed 7 years ago.
I am trying to show the difference in days and months between 2 dates
$date1 = $start;
$date2 = $end;
$diff = abs(strtotime($date2) - strtotime($date1));
$years = floor($diff / (365*60*60*24));
$months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
printf("%d years, %d months, %d days\n", $years, $months, $days);
However this shows as 0 years, 0 months, 0 days
The dates in $start and $end are in the format DD/MM/YYYY
As you have stated within your comment that The dates in $start and $end are in the format DD/MM/YYYY. So you need to first replace that into d-m-Y using str_replace or DateTime::createFromFormat so try using like as
$date1 = str_replace('/','-',$start);
$date2 = str_replace('/','-',$end);
PHP date conversion to strtotime

Categories