日期计算之间的差异不起作用

时间:2012-07-16 22:52:49

标签: php date

我有以下代码,根据天数的差异计算'borg'的数量。我回答了我的$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;
}

4 个答案:

答案 0 :(得分:1)

因为您的上一个else将始终将$borg设置为0,除非评估了相应的if

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

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

答案 1 :(得分:1)

我真的不明白你在计算什么,但我清楚地知道为什么你总是在博格有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;
}

这样,只有在所有语句都为假的情况下才会执行$ borg = 0代码。

答案 2 :(得分:1)

你应该使用elseif。如果计算,则执行每个操作,然后以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

答案 3 :(得分:1)

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

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

第一个适用于$days大于负28 小于负35,同时。这是不可能的,因此else始终适用,$borg始终为零。所有其他if语句都没有以任何方式链接到最后两个语句,所以它们总是被评估。你的其他if中至少有三个有同样的问题:他们设置了一个无法实现的条件。

认为这就是您要做的事情:$borg的值会随着$days变得更负而变小。如果您使用else if条件,则不必每次都重复和反转之前的条件,并且更容易看到您正在做什么(当您意外翻转时很有用{{1} }和<):

>
相关问题