Невозможно правильно рассчитать дату с датой "0000-00-00" в php - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть две даты, подобные этой

$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 Ответ

0 голосов
/ 07 ноября 2018

Вы можете полагаться на тот факт, что отметка времени начинается с 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);

Это нужно уточнить, потому что это не будет работать во всех случаях, но работает в вашем случае.

...