手軽にカレンダーを表示できる jQuery UI datepicker ですが、土日、祝日を色分けして表示したいケースがありました。
やりたいこと(=完成系)はこんな感じ。
- 土曜日:青
- 日曜日:赤
- 祝日:オレンジ

調べたら意外と簡単にできたのでシェアします。
書かないこと
jQuery、jQuery UIの導入については省略します。
手順
祝日の判定用ライブラリ取得
holiday_jp-js(GitHub) を使用して祝日を判定します。
npm でインストールする場合は、以下コマンド。
$ npm install @holiday-jp/holiday_jp
npmを使用しない場合は、コードをダウンロードして、releaseフォルダのholiday_jp.min.js を取得して、htmlで読み込みます。
今回はnpmを使用しないケースで記載。
祝日の判定用ライブラリ追加
以下ポイント
- holiday_jp.min.js の読み込み(7行目)
- jQuery系の読み込み(8行目〜11行目)
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script type="text/javascript" src="./holiday_jp.min.js"></script>
<script type="text/javascript" src="./jquery-3.6.0.min.js"></script>
<script type="text/javascript" src="./jquery-ui-1.12.1/jquery-ui.min.js"></script>
<link rel="stylesheet" href="./jquery-ui-1.12.1/jquery-ui.min.css">
<link rel="stylesheet" href="./jquery-ui-1.12.1/jquery-ui.theme.css">
<script type="text/javascript" src="./main.js"></script>
<link rel="stylesheet" href="style.css">
</head>
<body>
<p>Date: <input type="text" id="datepicker"></p>
</body>
</html>
土日の日付にclassを設定
jQuery ui datepicker の beforeShowDay を使って土日の日付にカスタムclassを設定します。
main.js
$(function () {
$("#datepicker").datepicker({
beforeShowDay: function(date) {
if (date.getDay() === 0) {
// 日曜日の場合
return [true, "custom-calendar-sunday", ""];
} else if (date.getDay() === 6) {
// 土曜日の場合
return [true, "custom-calendar-saturday", ""];
}
// 平日の場合
return [true, "custom-calendar-weekday", ""];
}
});
});
土日の日付のclassにCSSを設定
設定したカスタムclassに対して背景色を設定します。
(正確にはカスタムclassの配下のaタグに設定が必要)
style.css
.custom-calendar-saturday a.ui-state-default {
background-color: #c1e0ff;
}
.custom-calendar-sunday a.ui-state-default {
background-color: #ffc1c1;
}
祝日の日付にclassを設定
今回の主題、holiday_jp-jsを使用して祝日の日付を判定し、classを設定します。
ポイント
- holiday_jpで対象の日付が祝日かを判定(4行目〜7行目)
土日に祝日が被っていた場合、祝日を優先したいので、土日の判定よりも先に判定しています。
main.js
$(function () {
$("#datepicker").datepicker({
beforeShowDay: function(date) {
const holiday = holiday_jp.between(date, date);
if (holiday.length > 0) {
// 祝日の場合
return [true, "custom-calendar-holiday", ""];
} else if (date.getDay() === 0) {
// 日曜日の場合
return [true, "custom-calendar-sunday", ""];
} else if (date.getDay() === 6) {
// 月曜日の場合
return [true, "custom-calendar-saturday", ""];
}
// 平日の場合
return [true, "custom-calendar-weekday", ""];
}
});
});
祝日の日付のclassにCSSを設定
祝日の日付にも背景色のCSSを設定します。
style.css
.custom-calendar-saturday a.ui-state-default {
background-color: #c1e0ff;
}
.custom-calendar-sunday a.ui-state-default {
background-color: #ffc1c1;
}
.custom-calendar-holiday a.ui-state-default {
background-color: #ffe0c1;
}
確認
上記修正で完了。
土日、祝日に背景色が設定されました。
