こーど
これ以上にスマートな書き方あるかしら。(反語)
function getMonthRange($startUnixTime, $endUnixTime = null) {
if ($endUnixTime === null) {
$endUnixTime = time();
}
$ymList = array();
for ($utime = $startUnixTime; $utime <= $endUnixTime; $utime = strtotime('+1 month', $utime)) {
$ymList[] = date('Ym', $utime);
}
return $ymList;
}
ざつだん
いつでもプログラム書く上での日付のインクリメント/デクリメントが地味にハマりポイント
月を増減するのに $nextMonth = time() + (86400 * 30)
ってするとうまくいかないパターンがあるのはわかっても、 $nextDay = time() + 86400
が (いちおう厳密には) 正確じゃないっていう。うるう秒的に。
結局はPHP大先生のstrtotimeという痒いところに手が届くステキ機能のお力を借りて、+1 month
なり、 +1 day
なりするのが一番いいのかしらねぇ。
大昔に自分が書いたPerlとか見ると $month++
して $month>12
だったら $year++
したうえで $month=1
するようなバグインキュベーターコードが見えるのでPHP先生はすばらしい!さすが!