无法正确计算 php 中日期为“0000-00-00”的日期
Unable to correctly calculate date with "0000-00-00" date in 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
我的问题是当一个或所有日期都具有“0000-00-00”值时,我如何才能阻止这两个日期 return 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
语句更好的方法来做到这一点?
PS : 我正在使用 PHP 5.6
您可以相信时间戳从 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);
这需要改进,因为它不会在所有情况下都有效,但它适用于您的情况。
我有两个这样的约会对象
$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”值时,我如何才能阻止这两个日期 return 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
语句更好的方法来做到这一点?
PS : 我正在使用 PHP 5.6
您可以相信时间戳从 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);
这需要改进,因为它不会在所有情况下都有效,但它适用于您的情况。