【php】年度に分ける例(4月開始の)
問題
- お客様の声の投稿日の年度別の一覧表示を作りたい。
- 完成物件の完成日の年度別の一覧表示を作りたい。
- スタッフの入社日の年度別の一覧表示を作りたい。
といったとき、どうしましょう。
年度です。4月スタートで3月終了のあの年度です。
答え
こうしてみた。
//年リスト作成(スタートと終了は適宜調整) $ym = array(); foreach (range(1990, date('Y')) as $y) { foreach (array('01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12') as $m) { $ym[] = array($y, $m); } } //後ろに3ヶ月追加して、来年03月終わりにする $ym[] = array(date('Y') + 1, '01'); $ym[] = array(date('Y') + 1, '02'); $ym[] = array(date('Y') + 1, '03'); //先頭3ヶ月削除して、04月スタートにする unset($ym[0], $ym[1], $ym[2]); //新しい方を上にしたいときは反転 $ym = array_reverse($ym); //12ヶ月ごとに割る $ym = array_chunk($ym, 12);
これで $ym は、以下のような配列になる
array ( 0 => array ( 0 => array ( 0 => 2013, 1 => '03', ), 1 => array ( 0 => 2013, 1 => '02', ), 2 => array ( 0 => 2013, 1 => '01', ), 3 => array ( 0 => 2012, 1 => '12', ), 4 => array ( 0 => 2012, 1 => '11', ), 5 => array ( 0 => 2012, 1 => '10', ), 6 => array ( 0 => 2012, 1 => '09', ), 7 => array ( 0 => 2012, 1 => '08', ), 8 => array ( 0 => 2012, 1 => '07', ), 9 => array ( 0 => 2012, 1 => '06', ), 10 => array ( 0 => 2012, 1 => '05', ), 11 => array ( 0 => 2012, 1 => '04', ), ), 1 => array ( 0 => array ( 0 => 2012, 1 => '03', ), 1 => array ( 0 => 2012, 1 => '02', ), 2 => array ( 0 => 2012, 1 => '01', ), 3 => array ( 0 => 2011, 1 => '12', ), 4 => array ( 0 => 2011, 1 => '11', ), ...... ...... 8 => array ( 0 => 1991, 1 => '07', ), 9 => array ( 0 => 1991, 1 => '06', ), 10 => array ( 0 => 1991, 1 => '05', ), 11 => array ( 0 => 1991, 1 => '04', ), ), 22 => array ( 0 => array ( 0 => 1991, 1 => '03', ), 1 => array ( 0 => 1991, 1 => '02', ), 2 => array ( 0 => 1991, 1 => '01', ), 3 => array ( 0 => 1990, 1 => '12', ), 4 => array ( 0 => 1990, 1 => '11', ), 5 => array ( 0 => 1990, 1 => '10', ), 6 => array ( 0 => 1990, 1 => '09', ), 7 => array ( 0 => 1990, 1 => '08', ), 8 => array ( 0 => 1990, 1 => '07', ), 9 => array ( 0 => 1990, 1 => '06', ), 10 => array ( 0 => 1990, 1 => '05', ), 11 => array ( 0 => 1990, 1 => '04', ), ), )
foreachでループさせれば、1段目が年度のループ、2段目が月のループとなる。
あとは、ループの中で年月がマッチしたデータを表示するなどの処理をおこなえばよい。
タイムスタンプ(date()関数や、strtotime()関数など)に依存すると、1970年~2038年までの範囲しか扱えなくなるので、依存しないようにしたのもポイント。
コメント