Невозможно правильно рассчитать дату с датой "0000-00-00" в php
У меня есть два свидания, как это
$date1 = "2018-11-07";
$date2 = "2018-11-12";
Я хочу сравнить эти две даты, чтобы я мог получить диапазон дней между этими датами. я использовал DiffDate
функция. Это похоже на синтаксис ниже.
$datediff1 = new DateTime($date1);
$datediff2 = new DateTime($date2);
$interval = $datediff2->diff($datediff1);
echo $interval->d; // will return 5
Я получил функцию, но у меня проблема, когда одна из этих двух дат имела значение типа "0000-00-00". Они начали выглядеть так.
$date1 = "2018-11-07";
$date2 = "0000-00-00";
$datedif1 = new DateTime($date1);
$datediff2 = new DateTime($date2);
$interval = $datediff2->diff($datediff1);
echo $interval->d; // will return 8
//// If i reverse the date like $datediff1->diff($datediff2);
//// it will return 7 instead
Мой вопрос: как я могу предотвратить возвращение этих двух дат 0
когда одна или все даты имеют значение "0000-00-00"? Я пытался использовать как if...else....
if($date1 == "0000-00-00" || $date2 == "0000-00-00"){
$interval = "0";
echo $interval;
}else {
$interval = $date2->diff($date1);
$i = $interval->d;
}
Есть ли лучший способ сделать это, чем использовать if else
заявление?
PS: я использую PHP 5.6
1 ответ
Вы можете полагаться на тот факт, что временная метка начинается с 1970 года, поэтому 0000 год приведет к отрицательной временной метке:
$date1 = "2018-11-07";
$date2 = "0000-00-00";
$datedif1 = new DateTime($date1);
$datediff2 = new DateTime($date2);
// check if strtotime returns a valid timestamp and the year is not 0000
$interval = (!strtotime($date1) ||
!strtotime($date2) || strtotime($date1) < 0 ||
strtotime($date2) < 0) ? 0 : $date2->diff($date1);
print_r($interval);
Это нужно уточнить, потому что это не будет работать во всех случаях, но это работает в вашем случае.