[Php] كيفية سرد كل الشهور بين تاريخين


Answers

يجب عليك أن تحدث فرقا بين شهرين من نفس العام وشهرين من سنوات مختلفة.

$year_min = substr($row['contractStart'], 0, 4);
$year_max = substr($row['contractEnd'], 0, 4);
$month_min = substr($row['contractStart'], 5, 2);
$month_min = substr($row['contractEnd'], 5, 2);
$period = array();
try {
  if ($year_min > $year_max)
    throw new Exception();
  else if ($year_min == $year_max)
    if ($month_min > $month_max)
      throw new Exception();
    for ($month = $month_min; $month <= $month_max; $month++) {
      $period[] = $month . '-' . $year;
    }
  else {
    for ($month = $month_min; $month <= 12; $month++) {
      $period[] = $month . '-' . $year_min;
    }
    for ($year = $year_min + 1; $year < $year_max; $year++) {
      for ($month = $month_min; $month <= $month_max; $month++) {
        $period[] = $month . '-' . $year;
      }
    }
    for ($month = 1; $month <= $month_max; $month++) {
      $period[] = $month . '-' . $year_max;
    }
  }
  implode("<br />\r\n", $period);
}
catch (Exception $e) {
  echo 'Start date occures after end date.'
}

هذا للطريق الصعب. الآن هناك طريقة سريعة وسهلة تعطى بالفعل كإجابة وأوصيك باختيارها.

Question

أحاول إدراج جميع الأشهر بين تاريخين.

فمثلا؛ تاريخ البدء هو: 2010-12-02 وآخر موعد هو: 2012-05-06

أرغب في إدراج شيء مثل هذا:

2010-12
2011-01
2011-02
2011-03
2011-04
.
.
.
2012-04
2012-05

هذا ما جربته ولا يعمل على الإطلاق:

    $year_min = 2010;
    $year_max = 2012;
    $month_min = 12;
    $month_max = 5;
    for($y=$year_min; $y<=$year_max; $y++)
    {
        for($m=$month_min; $m<=$month_max; $m++)
        {
            $period[] = $y.$m;
        }
    }



كان هذا هو الحل الخاص بي لأن DateTime غير متوفر في بيئة الخادم الخاصة بي.

$a = "2007-01-01";
$b = "2008-02-15";

$i = date("Ym", strtotime($a));
while($i <= date("Ym", strtotime($b))){
    echo $i."\n";
    if(substr($i, 4, 2) == "12")
        $i = (date("Y", strtotime($i."01")) + 1)."01";
    else
        $i++;
}

جربه: http://3v4l.org/BZOmb






Links