Possible Duplicate:
How to find number of days between two dates using php
I don't want to know HOW to do this. I want to know why it doesn't gives the expected result.
I try to calculate the number of days between two dates formatted as YYYY-mm-dd with this code :
$day1 = strtotime($_REQUEST['start']);
$day2 = strtotime($_REQUEST['end']);
$nbOfDays = $day2 - $day1;
$nbOfDays = ceil($nbOfDays/60/60/24);
echo $nbOfDays;
The problem is when I calculate the difference between 2012-12-01 and 2012-12-31 it gives me 30 days (should be 31) And the difference between 2012-11-01 and 2012-11-30 is also 30 (that is correct!)
Updated for pure informations:
I had to modify this code (thanks to Justin):
$day1 = new DateTime($_REQUEST['start']);
$day2 = new DateTime($_REQUEST['end']);
$interval = round(abs($day2->format('U') - $day1->format('U')) / (60*60*24));
echo $interval;
for :
$day1 = new DateTime($_REQUEST['start']);
$day2 = new DateTime($_REQUEST['end']);
$nb1 = $day2->format('U');
$nb2 = $day1->format('U');
$interval = round(abs($nb1 - $nb2) / (60*60*24));
echo $interval;
because
$day2->format('U') - $day1->format('U')
was equals to 0
So at the end, the difference between 2012-12-31 and 2012-12-01 was still 30. BUUUTTTT, the difference between 2012-11-30 and 2012-11-01 was 29, so
echo $interval +1;
Gives the correct number of days in any case!
You should be using date_diff()
or its OO equivalent DateTime::diff()
for date/time differentials.
$day1 = new DateTime($_REQUEST['start']);
$day2 = new DateTime($_REQUEST['end']);
$interval = $day1->diff($day2);
echo $interval->format('%d');
For PHP version 5.2, you can use the following:
$day1 = new DateTime($_REQUEST['start']);
$day2 = new DateTime($_REQUEST['end']);
$interval = round(abs($day2->format('U') - $day1->format('U')) / (60*60*24));
echo $interval;
For PHP versions prior to 5.2, use strtotime()
with the above formula:
$day1 = strtotime($_REQUEST['start']);
$day2 = strtotime($_REQUEST['end']);
$interval = round(abs($day2 - $day1) / (60*60*24));
echo $interval;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With