祝日も対応!PHP自作カレンダー

サンプルデモ

サンプルデモをご覧ください。

仕様

初期状態では現在の年月のカレンダーを表示する。(例:2023年2月)

先月へと来月へのリンクをクリックすると先月のカレンダーと来月のカレンダーに移動。

リンクをクリックした時にurlにパラメーターが付与される(例:2023年1月の場合urlに?y=2023&m=1と付与)

下記の通り色つけ。

日付が無い部分:グレー#eee

土曜日:青色#0068b7

日曜日、祝日:赤色#e60012

当日:淡い黄色#fffcde

難しかった点

祝日の判定が難しかったです。

どう解決したか

カレンダーの日付が当日(淡い黄色#fffcde)であると判定するのと同じ要領で、

カレンダーの日付が内閣府の国民の祝日についてに記載されているcsvの祝日に含まれているかを判定させればできると考えました。

実際にarray_search()を使えばその判定ができるとわかりました。

しかし内閣府のcsvは日付以外にも、祝日の名称(成人の日や春分の日など)が入っているため、

内閣府のcsvから日付のみの新しい配列をつくり、さらにその配列とファイルの日付のフォーマットを揃えるために、explode()array_replace()を使用しました。

祝日の判定の流れ

内閣府のcsvをファイルに読み込む。(1955年から2024年までの祝日が記載)

csvの文字コードをUTF-8に変換する。

読み込んだファイルをvar_dumpで調べるとstring型になっている。

explode()前

string(24657) “国民の祝日・休日月日,国民の祝日・休日名称
1955/1/1,元日
1955/1/15,成人の日
1955/3/21,春分の日



2024/11/23,勤労感謝の日
string型ではあるが、日付ごとに改行されているので、改行でexplode()を使い、日付ごとに区切られた配列に変換する。

explode()後

array(1014) {
[0]=>
string(62) “国民の祝日・休日月日,国民の祝日・休日名称 ”
[1]=>
string(16) “1955/1/1,元日 ”
[2]=>
string(23) “1955/1/15,成人の日 ”



[1013]=>
string(30) “2024/11/23,勤労感謝の日 ”
}

日付のみにしたいので「,」でexplode()をし、日付と名称を分ける。

また日付が「/」だとファイルのフォーマットが使えないためarray_replace()で「-」に変換する。

日付と名称を分けた後

array(1014) {
[0]=>
array(2) {
[0]=>
string(30) “国民の祝日・休日月日”
[1]=>
string(31) “国民の祝日・休日名称 ”
}
[1]=>
array(2) {
[0]=>
string(8) “1955-1-1”
[1]=>
string(7) “元日 ”
}
[2]=>
array(2) {
[0]=>
string(9) “1955-1-15”
[1]=>
string(13) “成人の日 ”
}



[1013]=>
array(2) {
[0]=>
string(10) “2024-11-23”
[1]=>
string(19) “勤労感謝の日 ”
}
}

foreachで日付の方を取り出し新しい配列を作る。また日付以外に”国民の祝日・休日月日”という文言だけ残るので空にして

array_filter()で削除した後、array_values()でインデックス番号を0からに直します。

日付のみの配列を作成

array(1013) {
[0]=>
string(8) “1955-1-1”
[1]=>
string(9) “1955-1-15”
[2]=>
string(9) “1955-3-21”



[1012]=>
string(10) “2024-11-23”
}
これで内閣府のcsvが日付のみ配列になり、ファイルの日付のフォーマットと揃ったため、祝日の判定ができるようになりました!

使用言語

HTML/CSS/PHP

>お問い合わせはこちら

お問い合わせはこちら