如何查找广告系列日期和过滤日期之间的差异

时间:2015-04-29 05:40:50

标签: php date

我有4个约会对象,其中2个用于广告系列,其中一个是广告系列开始日期,另一个用于广告系列结束日期,过滤日期也是如此。现在,我想查看我的广告系列在给定过滤器开始日期和过滤器结束日期之间运行的天数。我正在使用这些条件,但

if ($datecs != FALSE && $datece != FALSE && $datefs != FALSE && $datefe != FALSE) {
    if( ($datecs >= $datefs) && ($datece <= $datefe)) {
        // campaign start and end date between filterdates
        $tot_days = $this->get_days($datecs,$datece);
        if($tot_days != 'ok'){
                return $tot_days;
        } else {
                return 0;
        }
    } elseif (($datecs <= $datefs) && ($datece >= $datefe)) {
        //filterdates between campiagn start and end
        $tot_days = $this->get_days($datefs,$datefe);
        if($tot_days != 'ok'){
            return $tot_days;
        } else {
            return 0;
        }
    } elseif(($datecs <= $datefs ) && ( $datece <= $datefe ) && ($datece >= $datefs)) {
        // campaign end date between filterdates
        $tot_days = $this->get_days($datefs,$datece);
        if ($tot_days != 'ok'){
            return $tot_days;
        } else {
            return 0;
        }
    } elseif(( $datecs>= $datefs) && ($datece >= $datefe) && ($datecs <= $datefe )) {
        // campaign start date between filterdates
        $tot_days = $this->get_days($datecs,$datefe);
        if (($tot_days != 'ok')) {
            return $tot_days;
        } else {
            return 0;
        }
    }
}

datecs是广告系列的开始日期,datece是广告系列结束日期.datefs是过滤器开始日期,datefe是过滤器结束日期。 get_days函数获取我使用的get_days函数的天数

function get_days($date1,$date2)
    {
        if($date2 > $date1)
        {
            $interval = $date1->diff($date2);
            return $interval->days+1;
            //we add one because it will not calculate the starting date if we substract. 
            //It will give the number of days to reach last date.
        } else if($date2 = $date1) {
            return 1;
        }
        else
        {
            return "ok";
        }
    }

如果我在哪里错了,请告诉我。

2 个答案:

答案 0 :(得分:1)

我重写了你的get_days函数:

function get_days($date1,$date2)
{
  if($date2 < $date1)
  {
    $interval = $date1->diff($date2);
    return $interval->days;
  } else if($date2 == $date1) {
    return 1;
  }
  else
  {
    return 0;
  }
}

我不知道你想要的是什么,但我发现了2个错误:

1)您使用=而非==进行比较

2)你换了比较法:它是$date2 < $date1

最好返回0是否失败&gt;尽量不要在同一个函数中混合返回类型,它会让你的代码更容易理解。

这对我有用。

修改

在你的第二个条件(第二行)你正在做:

if ($datecs >= $datefs) { get_days($datecs,$datece); }

然后如果函数get_days:if ($date2 > $date1)

这意味着你正在做

if ($datecs >= $datefs) 
  then if ($datecs < $datefs)
    //do some stuff

答案 1 :(得分:0)

你应该考虑使用php carbon。这是一个很棒的库,它具有许多功能,可以使这更简单,更容易阅读和理解。

http://carbon.nesbot.com/docs/