PHP将一组日期之间的所有日期显示为列表

Suppose I have 2 dates say 29 Aug 2014 and 3 Sep 2014. I need to display all dates between these to dates in the below format.

Aug 2014

29 Fri

30 Sat

31 Sun

Sept 2014

01 Mon

02 Tue

03 Wed

I know how to print all the dates like 29,30,31,1,2,3. But what I am unable to do is to get the month names in between.

Pretty easy question to be honest, pretty basic sollution possible..

$dateRange = new DatePeriod(
     new DateTime('2014-07-28'),
     new DateInterval('P1D'),
     new DateTime('2014-08-04 00:00:01')
);

$month = null;

foreach ($dateRange as $date)
{
    $currentMonth = $date->format('m Y');

    if ($currentMonth != $month)
    {
        $month = $date->format('m Y');
        echo $date->format('F Y').'<br />';
    }
    echo $date->format('d D').'<br />';
}

Above sollution results in:

July 2014
28 Mon
29 Tue
30 Wed
31 Thu
August 2014
01 Fri
02 Sat
03 Sun

Do mind it needs PHP >= 5.3 (due to the use of DatePeriod), but the actual logic to solve your question is easy to implement regardless of the used PHP version.

$timeS = strtotime("29 Aug 2014");
$timeE = strtotime("3 Sep 2014");

$monthS = -1;

$time = $timeS;
while ($time < $timeE) {

   if ($monthS != date("n", $time)) {
      echo date("M Y", $time) . "
";
      $monthS = date("n", $time);
   }

   echo date("d D", $time) . "
";

   $time = strtotime("+1 day", $time);

}

Edit: After doing it I'm pretty ok with @hindmost comment :)

I think , this is the complete code , as you wanted.

Executed code is here...

http://phpfiddle.org/main/code/3cbe-4855

<?php
$currentMonth = null; 
$timeS = strtotime("29 Aug 2013");
$timeE = strtotime("3 Sep 2014");

$time = $timeS;
while ($time < $timeE) {

    $month = date("M", $time);
    $year = date("Y", $time);

    if ($month != $currentMonth) 
        echo "<br /><h3>".$month."- ".$year."</h3>"; 
    $currentMonth = $month;

    echo "<br />".date("d D", $time);

   $time = strtotime("+1 day", $time);
}

?>