PHP:两个日期之间天数的列表

5
有没有一种简单的方法在PHP中获取两个日期之间的所有日期列表?
最终我希望得到这样的结果:
(伪代码)
date1 = 29/08/2013
date2 = 03/09/2013

resultArray = functionReturnDates(date1, date2);

结果数组将包含以下内容:

resultArray[0] = 29/08/2013
resultArray[1] = 30/08/2013
resultArray[2] = 31/08/2013
resultArray[3] = 01/09/2013
resultArray[4] = 02/09/2013
resultArray[5] = 03/09/2013

例如。

4
怎么样:http://www.php.net/manual/zh/class.dateperiod.php? - Mirco Widmer
我尝试将日期拆分并分别命名为date1Day、date1Month、date1Year、date2Day等。我开始通过减去不同的年份、月份和天数来计算它们之间相差的天数。然后从date1开始逐个添加日期。但是由于每个月的天数不同(30/31/28/29),我遇到了问题... - Juicy
5个回答

24
$date1 = '29/08/2013';
$date2 = '03/09/2013';

function returnDates($fromdate, $todate) {
    $fromdate = \DateTime::createFromFormat('d/m/Y', $fromdate);
    $todate = \DateTime::createFromFormat('d/m/Y', $todate);
    return new \DatePeriod(
        $fromdate,
        new \DateInterval('P1D'),
        $todate->modify('+1 day')
    );
}

$datePeriod = returnDates($date1, $date2);
foreach($datePeriod as $date) {
    echo $date->format('d/m/Y'), PHP_EOL;
}

谢谢,这似乎正是我要找的。 由于我对PHP还很陌生,如果您有另外一秒钟,能否告诉我反斜杠的含义? - Juicy
2
学习DateTime对象是一个好主意:它们强大而灵活,具有时区和夏令时意识;它们及其相关对象(DatePeriod和DateInterval)确实可以使处理日期变得简单。 - Mark Baker
@user2018084 请查看DateTime - IROEGBU
1
反斜杠是命名空间的引用,表示全局范围内的类... 如果您不使用命名空间,则无需担心它们:它们不是必需的,但也不会造成任何伤害。 - Mark Baker

7
function DatePeriod_start_end($begin,$end){

        $begin = new DateTime($begin);

        $end = new DateTime($end.' +1 day');

        $daterange = new DatePeriod($begin, new DateInterval('P1D'), $end);

        foreach($daterange as $date){
            $dates[] = $date->format("Y-m-d");
        }
        return $dates;

    }

2
不确定这是否实用,但它非常直观易懂。
$end = '2013-08-29';
$start = '2013-08-25';
$datediff = strtotime($end) - strtotime($start);
$datediff = floor($datediff/(60*60*24));
for($i = 0; $i < $datediff + 1; $i++){
    echo date("Y-m-d", strtotime($start . ' + ' . $i . 'day')) . "<br>";
}

0

试试这个:

function daysBetween($start, $end)
   $dates = array();
   while($start <= $end)
   {
       array_push(
           $dates,
           date(
            'dS M Y',
            $start
           )
       );
       $start += 86400;
   }
   return $dates;
}

$start    = strtotime('2009-10-20');
$end    = strtotime('2009-10-25'); 
var_dump(daysBetween($start,$end));

0
$datearray = array();
   $date = $date1;
   $days = ceil(abs($date2 - $date1) / 86400) + 1;//no of days

   for($i = 1;$i <= $days; $i++){

     array_push($datearray,$date);
     $date = $date+86400;

   }
     foreach($datearray as $days){
      echo date('Y-m-d, $days);
      }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接