和暦変換
// 元号の計算(2020年12月31日まで)
// 戻り値:計算結果の文字列
function calc_wareki($yyyy, $mm, $dd) {
$border = array(
array(開始日 => 18680909, 終了日 => 19120730, 元号 => 明治),
array(開始日 => 19120730, 終了日 => 19261225, 元号 => 大正),
array(開始日 => 19261225, 終了日 => 19890107, 元号 => 昭和),
array(開始日 => 19890107, 終了日 => 20201231, 元号 => 平成)
);
$target = sprintf("%04d%02d%02d", $yyyy, $mm, $dd);
if ($target < $border[0][開始日]) return "計算対象外";
for ($i=0; $border[$i]; $i++) {
if ($border[$i][開始日] <= $target && $target <= $border[$i][終了日]) {
$temp = ($yyyy - substr($border[$i][開始日], 0, 4) + 1);
$wareki = $border[$i][元号].($temp == "1" ? "元" : $temp);
break;
}
}
if ($i > 3) return "計算対象外";
return sprintf("%s年%d月%d日", $wareki, $mm, $dd);
}
干支の取得
function get_eto($year){
$arr_eto = array("子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥");
$idx = ($year + 8) % 12;
return $arr_eto[$idx];
}
第○曜日の取得
「1月の第2月曜日」や「10月の第2月曜に」など、特定の曜日の日付を取得する。
(手順)
(1)指定年月の1日目の曜日を求める。
(2)取得したい曜日との差から最初の曜日日付(第1x曜日)を取得する。
(3)取得した日付に7の倍数を加算して指定集の指定曜日(第x1x曜日)を算出する。
/**
* 指定年月のx番目のx曜日の日付を取得
*
* @param int $mon 月
* @param int $num 週番号
* @param string $week 曜日
* @return int 日付(当月を超えた場合は0を返す)
*/
function get_weekday($year, $mon, $num, $week) {
// 曜日テーブルから曜日番号を取得
$arr_week = array("日","月","火","水","木","金","土");
$search_week = array_search($week, $arr_week);
// 指定曜日の最初の日付を取得
$first_week = date("w", mktime(0,0,0,$mon,1,$year));
// 指定週の日付を算出
$ret_day = $search_week - $first_week + 1;
if ($ret_day < 1) {
$ret_day += 7;
}
$ret_day = $ret_day + ($num-1) * 7;
// 当月を超えた場合は0を返す
if ($ret_day > 31) {
$ret_day = 0;
}
return $ret_day;
}
年齢の算出
誕生日から現在の年齢を算出する。
function get_age($b_yy, $b_mm, $b_dd) {
$b_yy = intval($b_yy);
$b_mm = intval($b_mm);
$b_dd = intval($b_dd);
//今日の日付
$today = getdate();
//概算年齢 = 現在年 - 誕生年
$age = $today['year'] - $b_yy;
//誕生月を過ぎていない場合、概算年齢から1引く
if ($today['mon'] < $b_mm) {
$age--;
//今日が誕生月の場合
} elseif ($today['mon'] == $b_mm) {
//誕生日を過ぎていない場合、概算年齢から1引く
if ($today['mday'] < $b_dd) {
$age--;
}
}
//誕生日が今日より大きければ0を返す
if ($age < 0) {
return 0;
} else {
return $age;
}
}