年リストを作るときいろいろありますよね。
一番はじめに思いつくのは「生年月日」です。
結構<select>タグで作ること多いです。
年月日
こんな感じのやつ。※2013年1月1日しか選択出来ないのは仕様です。
これの「月」「日」はいいんですが、「年」って作った年のままってわけにはいかないのでいつも
「年リスト」なる変数を作って回して表示してるんです。
これをPHPでやってるので備忘録に書いておきます。
/** * X年からY年分のZ年ごとのリストを作成 * Z => 1 ならば 通常どおり 2014,2015,2016,2017 * Z => -1 ならば 減らしていく 2014,2013,2012,2011 * Z => 4 ならば 4年ごとの年 2014,2018,2022,2026 * Z => -2 ならば 2年減らし 2014,2012,2010,2008 * Z => 0 はNULL返却 */ function getYearList($x, $y ,$z) { // Y年分、Z年ごと が0はありえないのでNULL返却 if ($z == 0 || $y == 0) return NULL; // 基準年 if (!is_numeric($x)) { $x = date('Y'); // $xが数値ではない場合、本年を設定 } // 返却リスト $outputList = array(); for ($i = 0; $i < intval($y / abs($z)); $i ++) { $outputList[] = $x + ($i * $z); } return $outputList; }
※コードの先頭及び文末のPHPの開始・終了を省略しています。
この関数の使い方はカンタンに言うと下記のとおり
X年から : 例えば 2014年
Y年分のリスト: 例えば 100年
を
Z年ごとに : 例えば 4年ごと
取得する
// 冬季オリンピック開催年を2014年から100年分取得 $winterOlympicsYearList = getYearList(2014, 100, 4);
という感じになります。※ごめんなさい検証してません。
他にも便利に「和暦」出したりするメソッドもついでに・・・
/**
* 西暦―和暦変換
*/
function JpYear($y)
{
$ymd = $y."1225"; // 実際には正確ではないが12月25日として計算
if ($ymd <= "19120729") {
$gg = "M";
// $gg = "明治";
$yy = $y - 1867;
} elseif ($ymd >= "19120730" && $ymd <= "19261224") {
$gg = "T";
// $gg = "大正";
$yy = $y - 1911;
} elseif ($ymd >= "19261225" && $ymd <= "19890107") {
$gg = "S";
// $gg = "昭和";
$yy = $y - 1925;
} elseif ($ymd >= "19890108" && $ymd <= "20190430") {
$gg = "H";
// $gg = "平成";
$yy = $y - 1988;
} elseif ($ymd >= "20190501") {
$gg = "R";
// $gg = "令和";
$yy = $y - 2018;
}
return "{$gg}{$yy}";
}
/**
* 現在年から100年リスト降順
*/
function getBirthYearList() {
$currentYear = date('Y');
$outputList = array();
$yearList = getYearList($currentYear, 100, -1);
foreach( $yearList as $year ) {
$outputList[] = $year."年(".JpYear($year).")";
}
return $outputList;
}
add_shortcode( 'year_list', 'gtiGetBirthYearList' );
function gtiGetBirthYearList( $atts = array() ) {
$birth_year_list = getBirthYearList();
$retStr = "<option></option>";
foreach ($birth_year_list as $year) {
$retStr .= "<option>".$year."</option>";
}
return $retStr;
}
※コードの先頭及び文末のPHPの開始・終了を省略しています。
このコードでは下記のようなリストが出力されます・・・
<select name="birthday_year" id="birth_year">
<option value="" selected="selected"></option>
<?php
$birthday_year = $profile->brithday_year; // ここは適宜取得できるところから取得するものです。
$yearList = getBirthYearList();
foreach ($yearList as $yearStr) {
?>
<option value="<?php echo $yearStr; ?>" <php if ( $yearstr === $birthday_year) echo " selected='selected'"; ?>><?php echo $yearStr; ?></option>
<?php
}
?>
</select>
または WordPress ショートコード…(簡易的)
<p><select name="birthday_year" id="birth_year">[year_list]</select></p>
和暦変換ロジックは メルマガの「メルマ!」「やりたい事ができる!プログラミングを楽しもう」を使用させていただきました。
ありがとうございました。
上記メルマガの記事の中では年月日から和暦を出すロジックになっております。
今回は便宜上「大正」~「平成」まで出したかったので「12月25日」という想定で「昭和1年」を出しています。
参考になれば幸いです。