2016-10-12 6 views
1

Im пытается вернуть разницу между 2 датами, я работаю по example found on stackoverflowPHP сравнить разницу между двумя датами

Моей проблемы? Я получаю полностью неправильные результаты, возвращаемый код, следующий код возвращает 30 лет, 0 месяцев, 9 дней, когда это должно быть очевидно только 7 дней или 1 неделя.

код следует ниже:

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

Любой вклад оценили

+0

Используйте встроенные функции даты PHP, не делайте вычисления наивных часов * дней. – Dai

ответ

1

просто поставить одинарную кавычку в дату возвращения, как $returnDate = '2016-10-20'; и вы можете использовать date_diff() функцию PHP как,

$daysdiffernce = date_diff(date_create('2016-10-13'),date_create('2016-10-20')); 
echo $daysdiffernce->format("%R%a days"); 

и это даст точно + 7дней ответ

+0

Дайте мне знать, если это не сработает для вас ??? –

+0

Работали как шарм; каждый день вы узнаете что-то новое 'date_diff()' Спасибо –

1

Во-первых, код не учитывает високосные годы, варьируя длину месяцев и тому подобное.

Существует на самом деле функция в PHP для этого, пожалуйста, проверьте ссылку на детали: http://php.net/manual/en/datetime.diff.php и пример, взятый:

$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'); 
1

Попробуйте это, это даст вам различаются даты, и времени, минут, час, второй, и т.д.

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

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

Благодаря

Смежные вопросы