Класс DateTime, как обращаться с отрицательным интервалом дат

У меня есть простая функция, которая возвращает количество дней между двумя датами, используя функцию сравнения DateTime. Но сейчас он по-прежнему возвращает положительное число, если дата окончания предшествует дате начала. Есть ли способ вернуть отрицательную разницу, используя этот метод? Или я бы поспорил лучше просто проверить с strtotime в моей функции? В идеале я думаю, что я просто верну 0 из его отрицательной разницы.

//Returns the total number of days between two dates
function count_days($start_date, $end_date){

    $d1 = new DateTime($start_date);
    $d2 = new DateTime($end_date);
    $difference = $d1->diff($d2);
    return $difference->days;

}

2 ответа

Решение

Использовать r флаг, чтобы получить отрицательный знак там:

function count_days($start_date, $end_date){

    $d1 = new DateTime($start_date);
    $d2 = new DateTime($end_date);
    $difference = $d1->diff($d2);
    return $difference->format('%r%a days');

}

Проверьте разницу в $ -> инвертировать

function count_days($start_date, $end_date){

   $d1 = new DateTime($start_date);
   $d2 = new DateTime($end_date);
   $difference = $d1->diff($d2);
   if ($difference->invert == 1) { //if 1 then difference will in minus other wise inplus
      return -$difference->d;
   } else {
     return $difference->d;
   }

}

Другие вопросы по тегам