Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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
like image 325
metaforce Avatar asked Jan 20 '23 08:01

metaforce


2 Answers

$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

like image 50
dynamic Avatar answered Jan 30 '23 01:01

dynamic


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

}

like image 38
Igor Hrcek Avatar answered Jan 30 '23 00:01

Igor Hrcek