在datetime php中没有为上个月生成的值

时间:2015-10-29 12:11:19

标签: php datetime

我想在两个给定的日期之间获得每个月的sat& sun数量。

例如:对于2015年7月5日的start_date和2015年8月29日的end_date,我需要在7月7日和7月份获得7个星期日和星期日。

到目前为止,我的价值一直持续到上个月的第二个月,即:没有获得8月。 怎么办?

代码

$countSat = 0;
$countSun = 0;
$start = new DateTime('05-07-2015');
$month = $start->format('n');
$end = new DateTime('29-08-2015');
$interval = DateInterval::createFromDateString('1 day');
$period = new DatePeriod($start, $interval, $end);

$i = 0;
foreach ($period as $dt) {
    if ($month != $dt->format('n')) {
        $results[$i] = $countSun + $countSat;
        $i++;
        $countSun = 0;
        $countSat = 0;
    }

    if ($dt->format('N') == 7) {
        $countSun++;
    }
    if ($dt->format('N') == 6) {
        $countSat++;
    }
    $month = $dt->format('n');
}
echo '<pre>';
print_r($results);

1 个答案:

答案 0 :(得分:0)

在循环完成后,您忘记添加结果。循环内的月份只会从7变为8。 因此,上个月的日子正在被计算,但从未加入。

$countSat = 0;
$countSun = 0;
$start = new DateTime('05-07-2015');
$month = $start->format('n');
$end = new DateTime('29-08-2015');
$interval = DateInterval::createFromDateString('1 day');
$period = new DatePeriod($start, $interval, $end);

$i = 0;
foreach ($period as $dt) {
    if ($month != $dt->format('n')) {
        $results[$i] = $countSun + $countSat;
        $i++;
        $countSun = 0;
        $countSat = 0;
    }

    if ($dt->format('N') == 7) {
        $countSun++;
    }
    if ($dt->format('N') == 6) {
        $countSat++;
    }
    $month = $dt->format('n');
}

$results[$i] = $countSun + $countSat;

echo '<pre>';
print_r($results);