Как извлечь каждый понедельник и каждые две недели понедельника из диапазона двух дат в PHP? - PullRequest
4 голосов
/ 29 июня 2011

Я использую печально известный DatePicker пользовательского интерфейса jQuery, и в своей форме я выбираю диапазон из двух дат.

Первая соответствует дате , начиная с , а вторая соответствует дате окончания .

Теперь мне нужны algorthm, некоторые советы и указания или помощники для расчета каждый понедельник между этими двумя датами.

Например:

start: 2011-06-01
end:   2011-06-30

Извлеките мне эти 4 (четыре) даты, которые лежат по понедельникам:

1st: 2011-06-06
2nd: 2011-06-13
3rd: 2011-06-20
4th: 2011-06-27

Как я мог достичь этого?

А также, мне нужно это было бы на каждый двухнедельный понедельник:

Результат за две недели должен быть:

1st: 2011-06-06
2rd: 2011-06-20

Ответы [ 2 ]

6 голосов
/ 29 июня 2011
$start = strtotime('2011-06-01');
$end = strtotime('2011-06-30');

$mondays=array();

while( $start <= $end  ) {
  if ( date('N',$start)==1 )   
    $mondays[]=$start;

  $start += 86400; //> incrementing one day   
                   //> i could have used strtotime('+1 day') but math sum is 10x faster

}
//> Untested

Теперь у вас есть все ваши понедельники в массиве $mondays.

Добавление

Помните, что +86400 может привести к противоречивым результатам из-за перехода на летнее время. Если ваше приложение критически важно, используйте +1 day

strtotime('2010-10-31') + 86400 возвращает 2010-10-31

3 голосов
/ 29 июня 2011
function getAllMondays($from_date, $to_date){
// getting number of days between two date range.
$number_of_days = count_days(strtotime($from_date),strtotime($to_date));

for($i = 1; $i<=$number_of_days; $i++){
    $day = Date('l',mktime(0,0,0,date('m'),date('d')+$i,date('y')));
    if($day == 'Monday'){
        echo Date('d-m-Y',mktime(0,0,0,date('m'),date('d')+$i,date('y'))),'<br/>';
    }
}

}

...