返回php5.2中某个日期范围的日期字符串数组


Return array of date strings for a date range in php 5.2

我有这个代码

<?php
function getDatesBetween2Dates($startTime, $endTime) {
  $day = 86400;
  $format = 'd-m-Y';
  $startTime = strtotime($startTime);
  $endTime = strtotime($endTime);
  $numDays = round(($endTime - $startTime) / $day) + 1;
  $days = array();
  for ($i = 0; $i < $numDays; $i++) {
      $days[] = date($format, ($startTime + ($i * $day)));
  }
  return $days;
}
$days = getDatesBetween2Dates(
  date('d-m-Y', strtotime("$start")),
  date('d-m-Y',strtotime("$end"))
);
foreach ($days as $key => $value) {
  // ...
}

然后继续搜索数据库并根据日期返回显示结果。我没有写这个代码,也不知道它是从哪里来的。

问题是,是在2014年11月2日返回两个???它把每件事都搞砸了。任何帮助都会很棒。我会尝试分享一个页面链接。(页面包含个人信息)

http://djwservices.co.uk/invoices/calendar.php

作为一个附带问题,如果有人能让膨胀/收缩来处理onclick,那就太棒了。

提前感谢Daz

使用PHP 5.5生成器,您可以执行以下操作:

function period($begin, $interval, $end) {
    while ($begin <= $end) {
        yield $begin;
        $begin->add($interval);
    }
}
$interval = new 'DateInterval('P1D');
$begin = new 'DateTime( '2014-11-01' );
$end = new 'DateTime( '2014-11-30' );
foreach (period($begin, $interval, $end) as $dt) {
    echo $dt->format( "Y-m-d" ), PHP_EOL;
}

使用函数date_diff应该会更容易。来自手册:

$datetime1 = new DateTime('2009-10-11');
$datetime2 = new DateTime('2009-10-13');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%a days');

如果您还没有php5.3:,这里有一个修改后的版本

function getDatesBetween2Dates($startTime, $endTime) {
    $datetime1 = new DateTime($startTime);
    $datetime2 = new DateTime($endTime);
    $interval = round(($datetime2->format('U') - $datetime1->format('U')) / (60*60*24));
    for ($i = 0; $i < $interval; $i++) {
       $dateTemp = $datetime1;
       $str = "+" . $i . " day";
       $dateTemp = $dateTemp->modify($str);
       $days[] = $dateTemp->format('d-m-Y');
    }
   return $days;
}