这个问题在几个月似乎与旧问题类似,但我有一个特殊问题。 我不是要计算两个日期之间的月份,但我想把这些月份包括在两个日期中。 我解释。我有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个月?
答案 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>';
}
}