Difference between date objects in php - php

I need to to find the difference between two date objects in php
I tried this:
if(strtotime($current)>strtotime($LastUpdated))
{
$diff=strtotime($current) - strtotime($LastUpdated);
}
else
{
$diff=strtotime($LastUpdated) - strtotime($current);
}
This gave me junk values.
I also tries this
$diff=date_diff(new DateTime($current),new DateTime($LastUpdated));
This is giving me zero.
How do I go about finding the difference?

The Manual is your friend. - http://pt1.php.net/manual/en/datetime.diff.php
With examples for Object-Oriented and Procedural programming.
pasted from the link above:
OOP:
$datetime1 = new DateTime('2009-10-11');
$datetime2 = new DateTime('2009-10-13');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%a days');
Procedural:
$datetime1 = date_create('2009-10-11');
$datetime2 = date_create('2009-10-13');
$interval = date_diff($datetime1, $datetime2);
echo $interval->format('%R%a days');
and the result will be:
+2 days
have fun :)

<?php
$date1 = "2007-03-24";
$date2 = "2009-06-26";
$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);
I think this is better for you.

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

PHP Date Difference with Custom Format

I'm facing some problem while calculating the difference between two dates because of Date Format, please help me to fix this issue.
Date 1 - (Format: d/m/Y)
date_default_timezone_set("Asia/Kolkata");
$date1 = date('d/m/Y');
//Output - 20/05/2020
Date 2 - (Format: d/m/Y)
$date2 - 01/27/2020
My Code -
$diff = abs($date2 - $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));
// Print the result
printf("%d years, %d months, %d days", $years, $months, $days);
You don't have to calculate days, month etc manually. There is already DateTime Class available in PHP which you can leverage.
$date1 = DateTime::createFromFormat('d/m/Y', '20/05/2020'); // Use $date1 = new DateTime('NOW'); For Current Time
$date2 = DateTime::createFromFormat('d/m/Y', '25/05/2020');
$interval = $date1->diff($date2);
printf("%d years, %d months, %d days", $interval->y, $interval->m, $interval->d);
Official PHP Documentation: PHP DateTime Class
First you shoud use date format(Format: Y/m/d) and second use strtotime to convert date to seconds because abs function working with numeric values. try following code :
date_default_timezone_set("Asia/Kolkata");
$date1 = strtotime(date('Y/m/d'));
$date2 = strtotime('2020/05/27');
$diff = abs($date2 - $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));
// Print the result
printf("%d years, %d months, %d days", $years, $months, $days);
Output :
0 years, 0 months, 7 days

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

Calculate date difference between two dates

I am trying to find difference between two dates.
It simple does not display anything , empty page shown for the date difference.
below is the code that i am using.
<?
$sql = $Db1->query("SELECT * FROM table LIMIT 5");
while($row = $Db1->fetch_array($sql)) {
$datetime1 = date("m-d-Y",mktime(0,0,$row['rec'],1,1,1970));
$datetime2 = date("m-d-Y",mktime(0,0,$row['send'],1,1,1970));
echo "$datetime1";
echo "$datetime2";
$diff=date_diff($datetime1,$datetime2);
echo $diff->format("%R%a days");
echo "$diff";
}
?>
use this function
$date1 = $row['rec'];
$date2 = $row['send'];
$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);
i have created a function that i use you can change it to as per your requirement.
leave date two empty if you want to find difference b/w current date and given date.
function dayspassed($dategiven, $dategiven2){
if(empty($dategiven2)){
$currentdate = date('Y-m-d');
}else{
$currentdate = $dategiven2;
}
$currentdate = strtotime($currentdate);
$dategiven = explode(" ", $dategiven);
$dategiven = $dategiven['0'];
$yourdate = strtotime($dategiven);
$datediff = $yourdate - $currentdate;
return $difference = floor($datediff/(60*60*24));
}
I have the following function:
function get_date_difference_in_days($timestamp1, $timestamp2) {
$inputSeconds = abs($timestamp1 - $timestamp2);
$days = floor($inputSeconds / (24 * 60 * 60));
return $days;
}
The problem with your code is that date_diff works with datetime objects, and you were passing parameters as a string and not as datetime objects.
Looking at the docs clearly states that date_diff is an alias function for DateTime::diff().
So the solution would be:
$row = array("rec" => "2014-12-24", "send" => "2014-12-20");
$datetime1 = DateTime::createFromFormat("Y-m-d", $row["rec"]);
$datetime2 = DateTime::createFromFormat("Y-m-d", $row["send"]);
echo $datetime1->format("Y-m-d");
echo $datetime2->format("Y-m-d");
$diff = $datetime1->diff($datetime2);
echo $diff->format("%r%a");

how to get a difference in dates, when the dates is passed through post variable to another page and echo the difference in php

I tried with the below code to find the difference between two dates which is passed through post variable and print, but failed.
$fromdate=$_POST['from_date'];
$todate=$_POST['to_date'];
$date1 = new DateTime($fromdate); //inclusive
$date2 = new DateTime($todate); //exclusive
$diff = $date2->diff($date1);
echo $diff;
Something like this should work for you:
<?php
$_POST['from_date'] = "2014-10-01";
$_POST['to_date'] = "2014-11-02";
$fromdate = $_POST['from_date'];
$todate = $_POST['to_date'];
$diff = abs(strtotime($fromdate) - strtotime($todate));
$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);
?>
Output:
0 years, 1 months, 2 days

Categories