开发者

filter days of week createDateRangeArray

开发者 https://www.devze.com 2023-04-03 07:09 出处:网络
I have this function to generate an array of dates between a range. I need to modify it so that it will accept another paramerter if passed with a particular day of the week.

I have this function to generate an array of dates between a range. I need to modify it so that it will accept another paramerter if passed with a particular day of the week.

I will then get all the dates for that day within the range. I have not been able to modify. Thanks.

Here is my updated code, it is still add for evey day in the date range even though I am passing in the value of 6. I is probably staring me in the face but I cannot see it.

function createDateRangeArray开发者_StackOverflow中文版($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;
  }

}


replace

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

by

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

where $dateOfWeek is 0 (for Sunday) through 6 (for Saturday)

Besides, you can rewrite your code to:

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

to avoid repeat of code here (You need not if after that)

To add it as optional argument:

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));
}


The above answer (from RiaD) basically nails it.

Just a note: if you want just a specific weekday, there's no need to iterate every weekday.

You could iterate everyday until the first desired weekday, from them on just skip 86400*7 seconds. Much more efficient.

0

精彩评论

暂无评论...
验证码 换一张
取 消