预期的输入:

getDatesFromRange( '2010-10-01', '2010-10-05' );

预期的输出:

Array( '2010-10-01', '2010-10-02', '2010-10-03', '2010-10-04', '2010-10-05' )

当前回答

这里有一种使用Carbon https://github.com/briannesbitt/Carbon:的方法

public function buildDateRangeArray($first, $last)
{
    while ($first <= $last) {
        $dates[] = $first->toDateString();

        $first->addDay();
    }

    return $dates;
}

当然,这可以被调整为不使用碳。传递给函数的$first和$last参数是Carbon实例。

其他回答

我认为这是最简短的答案

按照您的喜好编辑代码

for ($x=strtotime('2015-12-01');$x<=strtotime('2015-12-30');$x+=86400)
echo date('Y-m-d',$x);

你也可以看看DatePeriod类:

$period = new DatePeriod(
     new DateTime('2010-10-01'),
     new DateInterval('P1D'),
     new DateTime('2010-10-05')
);

这将为您提供一个包含DateTime对象的数组。

迭代

foreach ($period as $key => $value) {
    //$value->format('Y-m-d')       
}
function createDateRangeArray($start, $end) {
// Modified by JJ Geewax

$range = array();

if (is_string($start) === true) $start = strtotime($start);
if (is_string($end) === true ) $end = strtotime($end);

if ($start > $end) return createDateRangeArray($end, $start);

do {
$range[] = date('Y-m-d', $start);
$start = strtotime("+ 1 day", $start);
}
while($start < $end);

return $range;
} 

来源:http://boonedocks.net/mike/archives/137-Creating-a-Date-Range-Array-with-PHP.html

function datesbetween ($date1,$date2)
{
    $dates= array();
    for ($i = $date1
       ; $i<= $date1
       ; $i=date_add($i, date_interval_create_from_date_string('1 days')) ) 
    {            
       $dates[] = clone $i;
    }
    return $dates;
}

这是非常灵活的。

/**
 * Creating date collection between two dates
 *
 * <code>
 * <?php
 * # Example 1
 * date_range("2014-01-01", "2014-01-20", "+1 day", "m/d/Y");
 *
 * # Example 2. you can use even time
 * date_range("01:00:00", "23:00:00", "+1 hour", "H:i:s");
 * </code>
 *
 * @author Ali OYGUR <alioygur@gmail.com>
 * @param string since any date, time or datetime format
 * @param string until any date, time or datetime format
 * @param string step
 * @param string date of output format
 * @return array
 */
function date_range($first, $last, $step = '+1 day', $output_format = 'd/m/Y' ) {

    $dates = array();
    $current = strtotime($first);
    $last = strtotime($last);

    while( $current <= $last ) {

        $dates[] = date($output_format, $current);
        $current = strtotime($step, $current);
    }

    return $dates;
}