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

在PHP中获取两个日期之间的所有月份,php,date,datetime,Php,Date,Datetime,这个问题看起来和这个月的老问题相似,但我有一个特别的问题。 我不想计算两个日期之间的月份,但我想把月份包括在两个日期中。 我解释。我有两个约会: $begin = new DateTime( '2014-07-20' ); $end = new DateTime( '2014-10-10' ); 在这两个日期之间,我有4个月:7月、8月、9月、10月。 但我使用的脚本,我无法找到包括4个月,但只有3个月。以下是脚本: $interval = DateInterval::createFromDa

这个问题看起来和这个月的老问题相似,但我有一个特别的问题。 我不想计算两个日期之间的月份,但我想把月份包括在两个日期中。 我解释。我有两个约会:

$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个月?

对我来说,这不是一个最佳解决方案,但它运行良好:

<?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;
$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>';
    }
}
$begin=新日期时间('2014-07-20');
$end=新日期时间(“2014-10-10”);
$interval=DateInterval::createFromDateString('1天');
$period=newdateperiod($begin,$interval,$end);
$months=array();
foreach(期间为$dt){
如果(!in_数组($dt->format(“m”),$months)){
$months[]=$dt->format(“m”);
echo$dt->格式(“m”);
回声“
”; } }
您可以使用简单的
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');
}
$begin=新日期时间('2014-07-20');
$end=新日期时间('2014-10-10');
而($begin format('Y-m'),“\n”;
$begin->modify(‘下个月的第一天’);
}

我希望对所有这些月份进行循环。您的示例仅适用于$begin中的日期小于$end中的日期的情况。简单的解决方案是将$begin中的日期设置为月份的第一天,并将$end中的日期设置为非第一天(第二天、第三天或最后一天)的任何一天.好的,但是如果你用foreach做一个循环,你会注意到问题仍然是一样的@lgt这个时间间隔的问题是,它似乎在计算30天相当于几个月,它并没有告诉我哪个月在这个时间间隔内。现在好了吗?我没有做很多测试,但它很有效。是的!!谢谢Lght;)2014年7月1日至2014年9月30日期间似乎不起作用。。。你能测试一下吗?上面写着4个月,但只有3个月,这是非常优雅的。。。而且效果非常好!谢谢格拉维奇。这很有帮助
$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');
}