如何从PHP中的两个日期的每个星期一和每两周一次提取?

时间:2011-06-29 09:01:28

标签: php jquery algorithm datepicker date-range

我正在使用臭名昭着的jQuery UI的Datepicker,在我的表单中我选择了两个日期的范围。

首先代表开始日期,另一个代表结束日期。

我现在需要的是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 个答案:

答案 0 :(得分:6)

$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

答案 1 :(得分:3)

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/>';
    }
}

}