无法正确计算日期与PHP中的“ 0000-00-00”日期

时间:2018-11-07 03:25:26

标签: php if-statement datediff php-5.6

我有两个这样的约会

$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

我的问题是,当一个或所有日期的值都为“ 0000-00-00”时,如何防止这两个日期返回0?我尝试过使用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语句更好的方法了?

SEE IT ONLINE HERE

PS:我正在使用PHP 5.6

1 个答案:

答案 0 :(得分: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);

这需要加以完善,因为它不能在所有情况下都可以使用,但在您的情况下可以使用。