第一个日期是今天的日期,第二个日期是从数据库中检索的。我试图做的目的是我想在截止日期前 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');
什么是“(整数)”?我认为它必须将数字更改为整数,但我在 php.net 上找不到它列为function
.
我也想知道是否有其他方法可以做到这一点,或者这个人是否成功了。
功能学分:OldManRiver