Webサービス開発、あるよ
Webサービス開発、あるよ
2009.07.21

2つの月の差が欲しいとき

まっちー

どれだけ使う機会があるかどうかは分からないけれど、今日たまたま、2つの月の差を出したいという状況に出くわしたので、ちょいとメモ。ブログの月別アーカイブなんかを作るときに使えるかもしれない。セレクトボックスで月を選択するとその月の記事の一覧に飛べる、みたいなね。

ここでは、ブログの記事が2009年1月から今日(2009年7月)まで存在すると仮定しよう。 €

$date = strtotime('2009-01-01');

$month1 = date('Y')*12 + date('m');

$month2 = date('Y', $date)*12 + date('m', $date);

$result = $month1 - $month2;

for($i = 0; $i <= $result; $i++) {

 € € € € $options[] = date('Y年m月', strtotime("2009-01-01 + $i month");

}

何の説明もせずにソースだけ書いたけど、こんな感じでOK。$month1の方には常に現在の月が入力される。

これでフォームヘルパーのセレクトメソッドを使えば、下のような感じのセレクトボックスが作れる。ちなみにdate(‘Y’)に12をかけているのは、たとえば2009年の1月から2008年の1月を引いたら$resultには12が入らなければいけないから、そうしてるっす。

<?php echo $form->select('select', $options, null, null, false) ?>

出力結果↓

<select>

 € € € € <option>2009年1月</option>

 € € € € <option>2009年2月</option>

 € € € € <option>2009年3月</option>

 € € € € <option>2009年4月</option>

 € € € € <option>2009年5月</option>

 € € € € <option>2009年6月</option>

 € € € € <option>2009年7月</option>

</select>

id属性やvalue属性はめんどいのでここでは省略。

これだと月の古い方が上に来てしまうので、逆が良ければソートでもかければいけるさ。

U Y A
K A