фильтровать дни недели createDateRangeArray - PullRequest
0 голосов
/ 05 сентября 2011

У меня есть эта функция для генерации массива дат между диапазонами. Мне нужно изменить его так, чтобы он принимал другой параметр, если он прошел с определенным днем ​​недели.

Затем я получу все даты этого дня в пределах диапазона. Я не смог изменить. Спасибо.

Вот мой обновленный код, он все еще добавляется для каждого дня в диапазоне дат, хотя я передаю значение 6. Я, вероятно, смотрю мне в лицо, но не вижу его.

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 голосов
/ 05 сентября 2011

Ответ выше (от RiaD) в основном прибивает его.

Просто примечание: если вы хотите просто определенный день недели, нет необходимости повторять каждый день недели.

Вы можете выполнять итерации каждый день до первого требуемого дня недели, из них можно просто пропустить 86400 * 7 секунд. Гораздо эффективнее.

0 голосов
/ 05 сентября 2011

заменить

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