カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

かなり便利 – PHPで祝日を求める

この記事は最終更新日から1年以上経過しています。

かなり便利なので、以前から使わせていただいています。
isHoliday($year, $month, $day)だけで祝日かどうかがわかります。
他にもgetWeeksOfMonthという関数で、ある月の第n曜日の日付の取得もできます。

PHPで祝日を求める – ぱぷぅ家のホームページ
http://www.pahoo.org/e-soul/webtech/php02/php02-27-01.shtm

2016.07.05
2016年より施行された「山の日」にも対応されています。

六曜を取得する – 2018.01.18追記

先ほどとはまた別で公開されているプログラムを使って六曜も取得できます。

PHPで3ヶ月カレンダーを作る – ぱぷぅ家のホームページ
https://www.pahoo.org/e-soul/webtech/php02/php02-45-01.shtm

ダウンロードした中の「pahooCalendar.php」を読み込み、
以下のようなコードで六曜が取得できます。

// 六曜取得の設定
$pCalendar = new pahooCalendar();
$pCalendar->setLanguage('jp');
$pCalendar->makeLunarCalendar($year);

// 旧暦の取得
list($qmonth, $qday, $qq) = $pCalendar->Gregorian2Lunar($year, $month, $day);

$rokuyo = $pCalendar->rokuyou($qmonth, $qday);

echo $rokuyo;

通常は上記の方法で取得できるのですが、2018年の1~16日が
取得できなかったので、少し手を加えました。

取得できなかったのは旧暦が負の日付になることが原因でした。
例えば「1/1」だと「12/-15」となる。
「12/-15」とは、12月の0日(ゼロ日)よりも15日前ということになるよう。
つまり、12月1日よりも15日+1日前の日付を出せば良い、ということになります。
それを踏まえたのが以下のコードになります。

list($qmonth, $qday, $qq) = $pCalendar->Gregorian2Lunar($year, $month, $day);

if($qmonth > 0 && $qday > 0) {

    $rokuyo = $pCalendar->rokuyou($qmonth, $qday);

    echo $rokuyo;

} else {

    // 旧暦の日付が負だった場合の処理

    // まず1日の日付オブジェクトを作成
    $qdate = new DateTime("$year-$qmonth-01");

    // 負の日数+1日の分だけ日付を遡る
    $qdate->sub(new DateInterval("P".abs($qday - 1)."D"));

    // 遡った日付で六曜を取得
    $rokuyo = $pCalendar->rokuyou($qdate->format("n"), $qdate->format("j"));

    echo $rokuyo;

}
この記事がお役に立ちましたらシェアお願いします
8,148 views

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です