在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');
}