How to extract every Monday and every fortnightly Monday from a range of two dates in PHP?

偶尔善良 提交于 2019-12-22 08:23:23

问题


I'm using the infamous jQuery UI's Datepicker, and in my form I select a range of two dates.

First represents the starting date and the other represents the end date.

What I need now is the algorthm, some tips and directions or helpers for calculating every Monday between these two dates.

For instance:

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

Should extract me these 4 (four) dates witch lay on Mondays:

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

How could I achive this?

And also, I'd need it for every fortnightly Monday:

Result for fortnightly should be:

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

回答1:


$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

Now you have all your mondays in $mondays array.

Addendum

Be aware that +86400 could lead to inconsistent result due to daylight saving. If your app is mission-critical better use +1 day

strtotime('2010-10-31') + 86400 returns 2010-10-31




回答2:


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

}



来源:https://stackoverflow.com/questions/6518094/how-to-extract-every-monday-and-every-fortnightly-monday-from-a-range-of-two-dat

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!