如何首先比较两个日期,然后检查天数是否小于或等于 7


How to first compare two dates, then check to see if the number of days is less than or equal to 7

第一个日期是今天的日期,第二个日期是从数据库中检索的。我尝试做的事情的目的是我想在截止日期(即存储在数据库中的日期)前 7 天触发警报。

我试图用几种不同的方法解决这个问题,但没有任何成功。我首先使用 strtotime 函数从检索到的日期中减去天数,然后将其与今天的日期进行比较。这是我的第一次尝试:

$date1 =  strtotime(date('2013-11-14',strtotime('-7 days')));
$date2 = strtotime(date('Y-m-d'));
$check = $date1 - $date2;
$check = date('j',$check);
if($check <= 7){echo "Under 1 week";}

但这行不通,因为它没有考虑月份,只考虑了一天......因此,2013-12-14 将返回与 2013-11-13 相同的结果。

所以我尝试了:

$datetime1 = new DateTime('2009-10-11');
$datetime2 = new DateTime('now');
$interval = $datetime1->diff($datetime2);
$interval->format('%a');
if($interval <= 7){echo "Under 1 week";}

但是后来我得到一个错误:

*Object of class DateInterval could not be converted to int*

我认为无论如何,数字都是整数,但现在我知道事实并非如此。

我在互联网上做了很多搜索,因为我确信其他人一直在尝试做同样的事情,我发现这段有用的代码可以完美地工作:

function e_days($end,$start) {
/************************************************************************/
/* Purpose: To get the elapsed days of date diff as integer.            */
/************************************************************************/
$dtS = new DateTime($start);
$dtE = new DateTime($end);
$int = $dtE->diff($dtS);
$ret = (integer) $int->format('%a');
return $ret;
}  // end function

通常我会继续前进并感到高兴,但我不喜欢只使用我发现的东西而不理解它。我不明白的部分是这一行:

$ret = (integer) $int->format('%a');

什么是"(整数)"?我假设它必须将数字更改为整数,但我在列为function php.net 上找不到它。

我还想知道是否有其他方法可以做到这一点,或者这家伙是否做到了。

功能信用:奥德曼河

(integer)

紧随其后的任何内容转换为int类型。在您的情况下,它会将$int->format('%a')转换为整数。

请考虑以下事项(intinteger的别名):

$str = "10";
$num = (int)$str;
 
if ($str === 10) echo "String";
if ($num === 10) echo "Integer";

在上面的示例中,$int = $dtE->diff($dtS) ,因此intDateTime格式的两个DateTime对象之间的差异。根据文档,format('%a')返回两个对象之间的总天数。使用 (integer) 强制转换返回值可确保它将是int类型。

更新:

有关类型转换的更多信息,请参阅此处(对于整数)和此处(对于常规"类型杂耍")。

从文档中:

若要将值显式转换为整数,请使用 (int) 或 (整数) 强制转换。

整数)、(整数) - 转换为整数