过滤星期几天createDateRangeArray

时间:2011-09-05 17:16:05

标签: php cakephp date-range

我有这个函数来生成一个范围之间的日期数组。我需要对其进行修改,以便在一周中的特定日期传递时接受另一个参数。

然后我会在该范围内获取当天的所有日期。我无法修改。感谢。

这是我的更新代码,即使我传递了6的值,它仍然会在日期范围内添加evey日。我可能正盯着我,但我看不到它。

function createDateRangeArray($strDateFrom,$strDateTo,$dateOfWeek=6) {
  // takes two dates formatted as YYYY-MM-DD and creates an
  // inclusive array of the dates between the from and to dates.

  // could test validity of dates here but I'm already doing
  // that in the main script

  $aryRange=array();

  $iDateFrom=mktime(1,0,0,substr($strDateFrom,5,2),substr($strDateFrom,8,2),substr($strDateFrom,0,4));
  $iDateTo=mktime(1,0,0,substr($strDateTo,5,2),substr($strDateTo,8,2),substr($strDateTo,0,4));

  if ($iDateTo>=$iDateFrom) {


    if(!isset($dateOfWeek) || date('w')==$dateOfWeek) //if dateOfWeek not given or same as given
        array_push($aryRange,date('Y-m-d',$iDateFrom));

        while ($iDateFrom<$iDateTo) {
          $iDateFrom+=86400; // add 24 hours
          array_push($aryRange,date('Y-m-d',$iDateFrom));
        }
  }

  if(count($aryRange)<1){
    return false;
  } else{
    return $aryRange;
  }

}

2 个答案:

答案 0 :(得分:0)

替换

array_push($aryRange,date('Y-m-d',$iDateFrom));

通过

if(date('w',$iDateFrom)==$dateOfWeek)
    array_push($aryRange,date('Y-m-d',$iDateFrom));

其中$dateOfWeek为0(星期日)至6(星期六)

此外,您可以将代码重写为:

 while ($iDateFrom<$iDateTo) {          
      array_push($aryRange,date('Y-m-d',$iDateFrom));
      $iDateFrom+=86400; // add 24 hours, after adding it
 }

避免重复代码(之后你不需要if

将其添加为可选参数:

function createDateRangeArray($strDateFrom,$strDateTo,$dateOfWeek=null){

    if(!isset($dateOfWeek) || date('w')==$dateOfWeek) //if dateOfWeek not given or same as given
        array_push($aryRange,date('Y-m-d',$iDateFrom));
}

答案 1 :(得分:0)

上面的回答(来自RiaD)基本上就是钉在它上面。

请注意:如果您只想要特定的工作日,则无需每个工作日进行迭代。

你可以每天迭代直到第一个想要的工作日,从他们那里跳过86400 * 7秒。效率更高。