如何打印出两个日期之间的所有日期

4
以下是我用PHP编写的代码,用于显示两个日期之间的所有日期。但是它没有正常工作...
fromdate = 20-04-2015
todate =   25-05-2015

所以我的代码只显示了 20,21,22,23,24,25

但我需要这两个月之间的所有日期。

期望输出结果

20-04 21-04 22-04 23-04 24-04 25-04 26-04 27-04 28-04  ......upto 25-05

以下是我的代码...
 <?php
    $startdate = $_POST['fromdate'];
    $enddate = $_POST['todate'];
    $start = date('d', strtotime($startdate));
    $end=date('d', strtotime($enddate));
    ?>  

    <?php   for ($x = $start; $x <= $end; $x++) { ?>
        <th width="58%"><?php echo $x; ?></th>
        <?php } ?>
1个回答

10

使用 strtotime()date() 遍历日期并不推荐,因为它最多只能算是hackish。相反,应该使用 DateTime 来遍历日期:

$start    = new DateTime('20-04-2015');
$end      = (new DateTime('25-05-2015'))->modify('+1 day');
$interval = new DateInterval('P1D');
$period   = new DatePeriod($start, $interval, $end);

foreach ($period as $dt) {
    echo $dt->format("d-m") . "<br>\n";
}

演示

对于 PHP < 5.4 (echo phpversion();),它不支持数组解引用

演示

以上代码为开始和结束日期创建DateTime对象。我们必须将结束日期加一天,因为后面的循环中它不会被包含在内。然后创建一个DateInterval对象来表示一天的增量和一个DatePeriod对象来包含所有内容。然后循环遍历每个日期并以您期望的格式输出日期。


哇,这样好的解释在SO上很少见。太喜欢了! - Rizier123
解析错误:语法错误,在 $end = (new DateTime('25-05-2015'))->modify('+1 day'); 中出现了意外的 T_OBJECT_OPERATOR。 - ankit ingle
你正在运行哪个版本的PHP? - John Conde
PHP/5.3.5 版本的 PHP - ankit ingle
@ankitingle 请查看答案中的演示,针对 PHP 版本低于 < 5.4 的情况,其中不支持 数组解引用 - Rizier123
@JohnConde 如果您认为我的编辑太大了,只需回滚即可 :) (我只是想在手动链接和 PHP < 5.4 的示例中添加参考文献) - Rizier123

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