How to prevent calculate between two dates when there is a null date from one it?

1620 views php
4

I have two date like this

$date1 = "2018-11-07"; 
$date2 = "2018-11-12";

I want to compare these two date so i could get a range of day between these date. I used DiffDate function. It's looks like below syntax.

$datedif1 = new DateTime($date1);
$datediff2 = new DateTime($date2);
$interval = $datediff2->diff($datediff1);
echo $interval->d;   // will return 5

I got the function, but i have problem when one from these two date had a value like "0000-00-00". They started to looks like this.

$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 7

My question is how could i prevent these two dates return 0 when one or all dates have "0000-00-00" value ? I have tried like using if...else....

if($date1 == "0000-00-00" || $date2 == "0000-00-00"){
  $interval = "0";
  echo $interval;
}else {
  $interval = $date2->diff($date1);
  $i = $interval->d;

}

Is there any better way to do it rather than using if else statement ?

answered question

1 Answer

0

You can rely on the fact that the timestamp starts with 1970 so a 0000 year would result a negative timestamp :

$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);

This needs to be refined because it won't work in all cases but it's working in your case.

posted this

Have an answer?

JD

Please login first before posting an answer.