2014-10-08 4 views
1
года

Я обычно использую этот метод, чтобы вычислить разницу между двумя датами:разница высчитывает PHP между двумя датами без

$datediff = strtotime($enddate) - strtotime($startdate);   
$totalDays = floor($datediff/(60*60*24)); 

Но теперь у меня есть проблемы. Теперь я не должен учитывать год в расчете. Например, разница между двумя датами от 2 января 2014 года и 6 января 2015 года должна дать мне результат в течение 4 дней.

Для этого я изменил формат даты m-d, и используется метод ниже:

$startdate = date('m-d',strtotime($startdate)); 
$enddate = date('m-d',strtotime($enddate)); 
$datediff = $enddate - $startdate; 
$totalDays = floor($datediff/(60*60*24)); 

Но я получаю результат как 0. Может кто-нибудь мне помочь? Какая ошибка я делаю?

+2

Вы считаете високосные годы? – Marek

+1

так много плохих решений :(использование объекта времени php-времени проходит только в m-d части даты и использовать функцию даты diff – Dave

ответ

3

Пожалуйста, попробуйте следующее:

$startdate = 'January 1 2014'; 
$enddate = 'February 6 2015'; 
$startdate = date('d-m-1970',strtotime($startdate)); 
$enddate = date('d-m-1970',strtotime($enddate)); 
$datediff = strtotime($enddate) - strtotime($startdate); 
$totalDays = floor($datediff/(60*60*24)); 
echo $totalDays; 

Надеется, что это поможет

3

Вы можете заменить год на 1970 год и выполнить расчеты против этого.

$date1 = '2014-01-17 04:05:54'; 
$date2 = '2013-01-12 02:07:54'; 

$date1 = preg_replace('/([\d]{4})/', '1970', $date1); 
$date2 = preg_replace('/([\d]{4})/', '1970', $date2); 

$timestamp1 = strtotime($date1); 
$timestamp2 = strtotime($date2); 

$date_diff = gmdate('d H:i:s', abs($timestamp2-$timestamp1)); 

var_dump($date_diff); 
1

Просто возьмите «m-d» часть своей даты и добавьте любой год на ее конец, например. "-2014". Затем datediff() предоставит вам необходимый ответ.

3

здесь является PHP Решения DATETIME

$date1 = new DateTime('2015-01-02'); 
$date2 = new DateTime('2014-01-06'); 

switch (true) { 
    case ($date1 < $date2) : 
     $date2->setDate($date1->format('Y'), $date2->format('m'), $date2->format('d')); 
     break; 

    case ($date2 < $date1) : 
     $date1->setDate($date2->format('Y'), $date1->format('m'), $date1->format('d')); 
     break; 
} 

$interval = $date1->diff($date2); 
echo $interval->format('%R%a days'); // +4 days 

получайте удовольствие!

Или просто отрежьте год и оставьте часть переключателя.