【问题标题】:Unable to correctly calculate date with "0000-00-00" date in php无法在 php 中使用“0000-00-00”日期正确计算日期
【发布时间】:2018-11-07 03:25:26
【问题描述】:

我有两个这样的约会

$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

【问题讨论】:

  • 1970 年或更早的日期将返回 0 或负时间戳
  • 但是,我得到了 7 和 6……@Beginner
  • 检查我的编辑,我为我的代码添加了一些 sn-p @Beginner
  • if($date1 == "0000-00-00" || $date2 == "0000-00-00"){ 就够了

标签: php if-statement datediff 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);

这需要改进,因为它不适用于所有情况,但它适用于您的情况。

【讨论】:

  • DateTime::diff 返回一个 DateInterval 对象。您的结果是一个整数或一个 DateTime 对象。
猜你喜欢
  • 2016-06-04
  • 1970-01-01
  • 1970-01-01
  • 2016-09-14
  • 1970-01-01
  • 2012-12-22
  • 2013-06-09
  • 2011-08-23
  • 1970-01-01
相关资源
最近更新 更多