Bir başlangıç tarihi ve bitiş tarihi - Ben iki tarih var. Aylardır bir dizi başlangıç ve bitiş tarihi arasındaki her ay içerir ('YM' formatı) yanı sıra, bu tarihler ben denedim içeri olduğu aylar dönmek gerekiyor:
$start = strtotime('2010-08-20');
$end = strtotime('2010-09-15');
$month = $start;
while($month <= $end) {
$months[] = date('Y-m', $month);
$month = strtotime("+1 month", $month);
}
Sorun, yukarıdaki örnekte, sadece 'diziye değil, '2010-09' '2010-08 ekler olmasıdır. Çözüm açık olmalı gibi hissediyorum, ama ben sadece bunu göremiyorum.
Bu gibi durumlarda hesap içine almak gerektiğini unutmayın:
$start = strtotime('2010-08-20');
$end = strtotime('2010-08-21');
// should return '2010-08'
$start = strtotime('2010-08-20');
$end = strtotime('2010-09-01');
// should return '2010-08,2010-09'
$start = strtotime('2010-08-20');
$end = strtotime('2010-10-21');
// should return '2010-08,2010-09,2010-10'
Ayrıca, benim host PHP sürümü 5.2.6 olduğunu bu yüzden bu sınırlar içinde çalışmak zorundadır.
Ben kullanılan çözüm re aşağıda cevabını dayanmaktadır. ayın ilk günü için $start ayarı. Ancak bu sadece strtotime() ile çalışan ve bunun yerine web üzerinde bulunan başka bir işlevi kullanmak zorunda alamadı.
function firstDayOfMonth($uts=null)
{
$today = is_null($uts) ? getDate() : getDate($uts);
$first_day = getdate(mktime(0,0,0,$today['mon'],1,$today['year']));
return $first_day[0];
}
$start = strtotime('2010-08-20');
$end = strtotime('2010-09-15');
$month = firstDayOfMonth($start);
while($month <= $end) {
$months[] = date('Y-m', $month);
$month = strtotime("+1 month", $month);
}