列出两个日期之间的所有年份

3
我想用PHP和Mysql数据库列出两个日期之间的每一年,代码如下:
<?php

$start    = new DateTime('2010-12-02');
$start->modify('first day of this month');
$end      = new DateTime('2016-05-06');
$end->modify('first day of next month');
$interval = DateInterval::createFromDateString('1 year');
$period   = new DatePeriod($start, $interval, $end);

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

?>

输出

2010
2011
2012
2013
2014
2015

缺少年份2016。

我该怎么做才能使2016年也返回?它应该像2010年一样返回。

3个回答

1
$start    = '2010-12-02';
$end      = '2016-05-06';
$getRangeYear   = range(gmdate('Y', strtotime($start)), gmdate('Y', strtotime($end)));
print_r($getRangeYear);

使用range函数获取一系列数字列表,第一个参数为起始范围,第二个参数为结束范围。http://php.net/manual/en/function.range.php

0
<?php

    $start    = new DateTime('2010-12-02')->modify('+1 year');
    $start->modify('first day of this month');
    $end      = new DateTime('2016-05-06');
    $end->modify('first day of next month');
    $interval = DateInterval::createFromDateString('1 year');
    $period   = new DatePeriod($start, $interval, $end);

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

?>

只需编辑代码的第一行。希望过了一年后,它仍能帮助其他人。 - SaAy

0

很简单:您正在迭代 2010-12-022016-05-06 之间的日期。生成的日期如下:

  • 2010-12-02 -> 正确
  • 2011-12-02 -> 正确
  • 2012-12-02 -> 正确
  • 2013-12-02 -> 正确
  • 2014-12-02 -> 正确
  • 2015-12-02 -> 正确
  • 2016-12-02 -> 超过了 2016-05-06 - 停止算法。

我不知道您想要做什么,但似乎您应该更改结束日期。


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