我有一个数组格式的两个日期{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循环中的内容。这是我所拥有的,它不太有效。
答案 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/>";
}
答案 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个。