问题
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