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

我正在使用臭名昭着的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 

 $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数组中的所有$mondays

附录

请注意,由于夏令时, +86400可能会导致结果不一致。 如果你的应用程序是关键任务,那么最好使用+1 day

strtotime('2010-10-31') + 86400返回2010-10-31

 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('dm-Y',mktime(0,0,0,date('m'),date('d')+$i,date('y'))),'
'; } }

}