サンプルデモ
サンプルデモをご覧ください。
仕様
初期状態では現在の年月のカレンダーを表示する。(例: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()前
1955/1/1,元日
1955/1/15,成人の日
1955/3/21,春分の日
・
・
・
2024/11/23,勤労感謝の日
explode()後
[0]=>
string(62) “国民の祝日・休日月日,国民の祝日・休日名称 ”
[1]=>
string(16) “1955/1/1,元日 ”
[2]=>
string(23) “1955/1/15,成人の日 ”
・
・
・
[1013]=>
string(30) “2024/11/23,勤労感謝の日 ”
}
日付のみにしたいので「,」でexplode()をし、日付と名称を分ける。
また日付が「/」だとファイルのフォーマットが使えないためarray_replace()で「-」に変換する。
日付と名称を分けた後
[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からに直します。
日付のみの配列を作成
[0]=>
string(8) “1955-1-1”
[1]=>
string(9) “1955-1-15”
[2]=>
string(9) “1955-3-21”
・
・
・
[1012]=>
string(10) “2024-11-23”
}
使用言語
HTML/CSS/PHP