日期差异计算不起作用


Difference between dates calculation not working

我有以下代码,它根据天数的差异计算"博格"的数量。我调出我的$days变量来检查差异有多少天。根据这一点,我在某一天的差异是38天。为什么当我回显$borg时,它仍然显示0的数量?在本例中,$days = 38

$vandaag = date($format, strtotime('today'));
$verschil = $interval->d;
$diff = strtotime($retourdatum) - strtotime($vandaag);
$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
echo $days;
if($days > 0)
{
    $borg = 80;
}
if($days<0 && $days>-7)
{
    $borg = 65;
}
if($days>-7 && $days<-14)
{
    $borg = 50;
}
if($days>-14 && $days<-21)
{
    $borg = 35;
}
if($days>-21 && $days<-28)
{
    $borg = 20;
}
if($days>-28 && $days<-35)
{
    $borg = 5;
}
else
{
    $borg = 0;
}

您的最后两个条件块是这个特定问题的原因:

if($days>-28 && $days<-35)
{
    $borg = 5;
}
else
{
    $borg = 0;
}

第一种适用于$days大于负28同时小于负35的情况。这是不可能的,因此else始终适用,而$borg始终为零。您的所有其他if语句都不会以任何方式与后两个语句相关联,因此它们总是经过评估的。你的其他if中至少有三个有同样的问题:他们设置了一个不可能满足的条件。

认为这就是你想要做的:为$borg设置一个值,该值随着$days变得更负而变小。如果你使用else if条件,你不必每次都重复和反转以前的条件,而且更容易看到你在做什么(比如说,当你不小心翻转了<>时,这很有帮助):

$borg = 0;
if($days > 0)
{
    $borg = 80;
}
else if ($days > -7)
{
    $borg = 65;
}
else if ($days > -14)
{
    $borg = 50;
}
else if ($days > -21)
{
    $borg = 35;
}
else if ($days > -28)
{
    $borg = 20;
}
else if ($days > -35)
{
    $borg = 5;
}

因为上一个else将始终将$borg设置为0,除非对其相应的if进行求值。

解决方案是在所有if语句之前定义$borg = 0;,并去掉else语句。

 $borg = 0;
 if( ... )
 {
 }
 ...

我真的不明白你在计算什么,但我清楚地明白为什么你在borg中总是有0。

以下代码应该可以解决您的问题:

$vandaag = date($format, strtotime('today'));
$verschil = $interval->d;
$diff = strtotime($retourdatum) - strtotime($vandaag);
$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
echo $days;
if($days > 0)
{
    $borg = 80;
}
elseif($days<0 && $days>-7)
{
    $borg = 65;
}
elseif($days>-7 && $days<-14)
{
    $borg = 50;
}
elseif($days>-14 && $days<-21)
{
    $borg = 35;
}
elseif($days>-21 && $days<-28)
{
    $borg = 20;
}
elseif($days>-28 && $days<-35)
{
    $borg = 5;
}
else
{
    $borg = 0;
}

这样,只有当所有语句都为false时,才会执行$borg=0代码。

您应该使用elseif。进行每个if计算,然后以if/else状态结束。结果是$borg可以是5或0。

if($days > 0)
    $borg = 80;
elseif($days<0 && $days>-7)
    $borg = 65;
elseif($days>-7 && $days<-14)
    $borg = 50;
elseif($days>-14 && $days<-21)
    $borg = 35;
elseif($days>-21 && $days<-28)
    $borg = 20;
elseif($days>-28 && $days<-35)
    $borg = 5;
else
    $borg = 0;

请阅读此处的文档:elseif。