迭代数月/年;最小值和最大值

时间:2015-04-28 09:16:17

标签: php loops date

我有一个数组格式的两个日期{YYYY,MM}:

$min = {2014,7};
$max = {2015,4};

我正在尝试迭代这些,从最小值开始,一直到最大值。例如,我想打印下面的内容:

7 in 2014
8 in 2014
9 in 2014
...
12 in 2014
1 in 2015
...
4 in 2015

一些代码如下:

for ($i = $min["0"]; $i <= $max["0"]; $i++) { //year loop
    for ($j = max(1,$min["1"]); $j <= min(12,$max["1"]); $j++) { //month loop
        echo $j." in ".$i."</br>";
    }
    $min["1"] = 1;
} 

我不太确定嵌套for循环中的内容。这是我所拥有的,它不太有效。

2 个答案:

答案 0 :(得分:3)

如果您不介意考虑替代方案,您也可以使用DateTime课程:

$min = '{2014,7}';
$max = '{2015,4}';

$mn = DateTime::createFromFormat('{Y,n}', $min);
$mx = DateTime::createFromFormat('{Y,n}', $max);
$mx->modify('+1 month'); // add on ending
$i = new DateInterval('P1M'); // one month interval
$period = new DatePeriod($mn, $i, $mx);
foreach($period as $d) {
    echo "{$d->format('n')} in {$d->format('Y')} <br/>";
}

Demo

答案 1 :(得分:1)

这样做你想要的:

for ($i = $min["0"]; $i <= $max["0"]; $i++) {
    $end = ($i == $max["0"] ? $max["1"] : 12);
    for ($j = max(1,$min["1"]); $j <= $end; $j++) {
        echo $j." in ".$i."</br>";
    }
    $min["1"] = 1;
} 

您只需要定义每年的最大数量,除去年外,这是12个。

相关问题