【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年までの範囲しか扱えなくなるので、依存しないようにしたのもポイント。