获取PHP中两个日期之间的所有月份

时间:2014-09-10 08:48:51

标签: php date datetime

这个问题在几个月似乎与旧问题类似,但我有一个特殊问题。 我不是要计算两个日期之间的月份,但我想把这些月份包括在两个日期中。 我解释。我有2个日期:

$begin = new DateTime( '2014-07-20' );
$end = new DateTime( '2014-10-10' );

在这两个日期之间,我有4个月的时间:7月,8月,9月,10月。 但是使用我正在使用的脚本,我无法找到包括4个月但只有3个。这是脚本:

$interval = DateInterval::createFromDateString('1 month');

$period = new DatePeriod($begin, $interval, $end);
$counter = 1;

foreach($period as $dt) {
    echo $dt->format( 'm' );
    $counter++;
}

echo $counter;

如何计算循环中的所有这4个月?

4 个答案:

答案 0 :(得分:3)

您可以使用简单的while()循环执行此操作:

$begin = new DateTime('2014-07-20');
$end = new DateTime('2014-10-10');

while ($begin <= $end) {
    echo $begin->format('Y-m'), "\n";
    $begin->modify('first day of next month');
}

<强> demo

答案 1 :(得分:1)

<?php
$begin = new DateTime( '2014-07-20', new DateTimeZone('Europe/Paris') );
$end = new DateTime( '2014-10-10', new DateTimeZone('Europe/Paris') );
$end->add(new DateInterval("P1M"));
$interval = DateInterval::createFromDateString('1 month');

$period = new DatePeriod($begin, $interval, $end);
$counter = 0;

foreach($period as $dt) {
    echo $dt->format( 'm' );
    echo "\n";
    $counter++;
}

echo $counter;

这似乎有点棘手,但它应该适用于任何日期(我还没有经过多次测试)。我刚刚在$end日期添加了一个月,以便考虑到您希望在特定日期间隔内获得所有包含月份的事实。

答案 2 :(得分:0)

$begin = strtotime('2014-07-00');
$end= strtotime('2014-10-00');
$y1 = date('Y', $begin);
$y2 = date('Y', $end);
$m1 = date('m', $begin);
$m2 = date('m', $end);
$diff = (($y2 - $y1) * 12) + ($m2 - $m1);

答案 3 :(得分:0)

对我而言,这不是最佳解决方案,但它运作良好:

$begin = new DateTime( '2014-07-20' );
$end = new DateTime( '2014-10-10' );
$interval = DateInterval::createFromDateString('1 day');
$period = new DatePeriod($begin, $interval, $end);

$months = array();
foreach($period as $dt) {
    if(!in_array($dt->format( "m" ), $months)) {
        $months[] = $dt->format( "m" );
        echo  $dt->format( "m" );
        echo '<br>';
    }
}