Başlangıç ​​ve bitiş tarihleri ​​arasında ve Dahil Ay Dizisi dön

0 Cevap php

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);
}

0 Cevap