php - for loop for each month of year
我想要一个检查当前月份、未来12个月和过去4个月的循环。
例如:今天是8月1日。我的循环应该经过4月、5月、6月、7月、8月、9月、10月、11月、12月、1月、2月、3月、4月、5月、6月、7月和8月。
我试过频闪,但我不知道我怎么能在4个月前和12个月后循环。
这是我的代码
1 2 3 4 5 6 7 8 9 10 |
我认为Yoshi已经准备好回答了,但是在datetime中使用datetiperiod更为一致,并且使代码imho可读性更强:
1 2 3 4 5 6 7 8 | $oneMonth = new \DateInterval('P1M'); $startDate = \DateTime::createFromFormat('d H:i:s', '1 00:00:00')->sub(new \DateInterval('P4M')); $period = new \DatePeriod($startDate, $oneMonth, 16); foreach($period as $date){ //$date is an instance of \DateTime. I'm just var_dumping it for illustration var_dump($date); } |
看到它工作
这可能很棘手,我将这样做:
1 2 3 4 5 6 7 8 9 10 11 12 | $month = date("n","2013-08-01") - 1; // -1 to get 0-11 so we can do modulo // since you want to go back 4 you can't just do $month - 4, use module trick: $start_month = $month + 8 % 12; // +8 % 12 is the same is -4 but without negative value issues // 2 gives you: 2+8%12 = 10 and not -2 for ($i = 0; $i < 16; $i += 1) { $cur_month = ($start_month + $i) % 12 + 1; // +1 to get 1-12 range back $month_name = date('F Y', strtotime($cur_month ." months")); var_dump(month_name); } |
你的代码,只是稍微修改了一下。
1 2 3 4 5 6 7 8 9 10 11 12 13 | date_default_timezone_set('UTC'); $i = 1; $month = strtotime('-4 month'); while($i <= 16) { $month_name = date('F', $month); echo $month_name; echo""; $month = strtotime('+1 month', $month); $i++; } |
最简单的解决方案:
1 2 3 4 |
说明:
循环从-4开始一直到12(总共17个,包括0个)。
塔达!
像这样?:
1 2 3 4 5 6 7 8 |
使用日期时间是最简单和更易读的方法。我会这样做:
1 2 3 4 5 | $from = new DateTime('-4 month'); $to = new DateTime('+12 month'); while($from < $to){ echo $from->modify('+1 month')->format('F'); } |