PHPで曜日や祝日を判定する方法!初心者でもわかる日付処理の基本ガイド
生徒
「先生、PHPで『この日付は何曜日か』とか『祝日かどうか』って調べることはできますか?」
先生
「はい、できますよ。PHPには日付を扱う機能がしっかり用意されているので、曜日も祝日もチェックできます。」
生徒
「プログラミング初心者でもできますか?複雑そうに感じます……」
先生
「大丈夫です!今回は超初心者の方でもわかるように、曜日と祝日の判定方法をやさしく丁寧に説明しますね。」
1. PHPで日付を扱うってどういうこと?
PHP(ピー・エイチ・ピー)は、Webサイトで動的な表示を作るのが得意なプログラミング言語です。その中でも「日付や時間の操作」は非常によく使われる機能で、システム開発には欠かせません。
例えば、「今日の日付を表示する」「投稿してから何分経過したか計算する」「期間限定のキャンペーン終了までカウントダウンする」といったことが、PHPを使えば数行のコードで実現できます。
PHPで日付を扱う代表的な方法には、date()関数やDateTimeクラスがあります。「クラス」と聞くと難しく感じるかもしれませんが、「便利な道具がたくさん詰まった専用のツールボックス」だとイメージしてみてください。DateTimeクラスというツールボックスを取り出せば、初心者でも複雑な計算なしに日付を自由自在に操れるようになります。
まずは、今の「西暦・月・日・時間」を表示させる一番シンプルな書き方を見てみましょう。
<?php
// 現在の日時を保持する「DateTime」というツールボックスを用意します
$now = new DateTime();
// formatを使って、好きな形(年-月-日 時:分:秒)で表示します
echo $now->format("Y-m-d H:i:s");
?>
このコードだけで、サーバーが持っている正確な現在時刻を取得して画面に出すことができます。このように、PHPには日付を扱うための「共通のルール」が備わっているため、一度基本を覚えれば、曜日判定や祝日の計算といった応用もスムーズに理解できるようになります。
2. PHPで曜日を判定する基本の書き方:DateTimeクラスの使い方
プログラミングで日付を扱う際、もっとも便利で「標準的」な方法がDateTimeクラスを使う方法です。初心者の方でも、以下の手順通りに書けば、驚くほど簡単に特定の日付の曜日を導き出すことができます。
たとえば、2025年9月3日が何曜日なのかを判定するシンプルなサンプルコードを見てみましょう。コピー&ペーストして実際に動かしてみてください。
<?php
// 1. 調べたい日付を指定して「日付の塊(オブジェクト)」を作る
$date = new DateTime("2025-09-03");
// 2. formatメソッドを使って、曜日を英語のフルネーム(l:エル)で取得する
$weekday = $date->format("l");
// 3. 結果を画面に表示する
echo "2025年9月3日は " . $weekday . " です。";
?>
このコードのポイントは、format("l")(小文字のエル)という指定です。これはPHPに対して「曜日を英語のフルネームで出力してね」と命令する特別な記号です。実行すると、画面には"Wednesday"と表示されます。
「英語だと分かりにくいな…」と感じるかもしれませんが、まずはこの基本の形を覚えましょう。この英語の結果を元にして、後から「月・火・水…」といった日本語に変換する処理を加えていくのが、プログラミングの一般的な流れになります。
3. PHPで日付を日本語の曜日(月・火・水...)で表示する方法
PHPの標準機能では、曜日を取得すると「Monday」や「Mon」といった英語表記になってしまいます。Webサイトを日本語で作成している場合、「月曜日」や「(水)」のように表示したい場面が多いですよね。
プログラミング未経験の方でも一番分かりやすい方法は、「曜日の名前を書いたリスト(配列)」を自分で用意して、数字と紐付ける方法です。
<?php
// 1. 日本語の曜日のリスト(配列)を作る
$week_names = ["日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"];
// 2. 指定した日付のインスタンスを作る
$date = new DateTime("2025-09-03");
// 3. format("w")を使って、曜日を「0〜6の数字」で取得する
$index = (int)$date->format("w");
// 4. 配列から対応する曜日の文字を取り出して表示
echo "この日は " . $week_names[$index] . " です。";
?>
【ここがポイント!】
format("w") という命令を使うと、コンピュータは曜日を以下のルールで数字として返してくれます。
- 0:日曜日
- 1:月曜日
- (中略)
- 6:土曜日
この「0〜6」という数字は、配列の順番(インデックス)と完全に一致します。そのため、$week_names[$index] と書くだけで、複雑な条件分岐を使わなくてもスマートに日本語へ変換できるのです。シンプルですが、実務でも非常によく使われるテクニックです。
4. PHPで祝日を判定する方法は?初心者向けの簡単な手順
PHPを学習し始めると「カレンダー機能を作ってみたい」と思う方も多いでしょう。しかし、実はPHPの標準機能には「今日が祝日かどうか」を直接判定する関数は用意されていません。
日本の祝日は「国民の祝日に関する法律」によって決まりますが、振替休日やハッピーマンデー制度などで毎年日付が変動するため、プログラムで判定するには少し工夫が必要です。
プログラミング未経験の方でも取り組みやすい、代表的な2つの判定方法をご紹介します。
① 自分で祝日リストを作る方法
「1月1日は元日」のように、配列(データのリスト)に祝日を登録して、それと照らし合わせる最もシンプルな方法です。仕組みが理解しやすく、外部との通信も不要なため動作が高速です。
② 祝日判定APIを利用する方法
Googleカレンダーなどが提供している「祝日データ」をインターネット越しに取得する方法です。自分でリストを更新する手間が省けるため、実務ではこちらがよく使われます。
初心者向け:配列を使った自作判定サンプル
まずはイメージを掴むために、特定の特定の日が「元日」かどうかを判定する超シンプルなコードを見てみましょう。
// 判定したい日付(2026年1月1日)
$targetDate = "2026-01-01";
// 祝日リスト(配列)を作成
$holidays = [
"2026-01-01" => "元日",
"2026-01-12" => "成人の日",
"2026-02-11" => "建国記念の日"
];
// 指定した日付がリストにあるかチェック
if (isset($holidays[$targetDate])) {
echo $targetDate . "は「" . $holidays[$targetDate] . "」です!";
} else {
echo $targetDate . "は平日(または土日)です。";
}
このように、「日付」と「祝日名」をセットにして準備しておくのが基本の考え方です。これなら、複雑な計算式を使わなくても直感的に「どのコードが何をしているか」が分かりますよね。まずはこの基礎を押さえておきましょう。
5. 自作の祝日リストでチェックする方法
一番かんたんな方法は、自分で祝日を配列でまとめて、それと照らし合わせる方法です。
<?php
$holidays = [
"2025-01-01" => "元日",
"2025-01-13" => "成人の日",
"2025-02-11" => "建国記念の日",
// 必要に応じて追加
];
$today = "2025-01-01";
if (array_key_exists($today, $holidays)) {
echo $today . " は祝日(" . $holidays[$today] . ")です。";
} else {
echo $today . " は平日です。";
}
?>
この方法は手軽ですが、毎年祝日が変わる「ハッピーマンデー」などには対応しづらいというデメリットがあります。
6. 祝日APIを使えば自動で判定可能!
もっと便利にしたいなら、インターネット上の「祝日API(エーピーアイ)」を使う方法があります。これは、データを外部のサービスから取得する仕組みです。
たとえば「日本の祝日API」という無料で使えるサービスがあります。
これを使えば、自動的に祝日を取得できるので、毎年更新する必要がありません。
7. 祝日APIをPHPで使うサンプル
PHPのfile_get_contents()関数でAPIからデータを取得できます。以下は例です。
<?php
$today = date("Y-m-d");
$json = file_get_contents("https://holidays-jp.github.io/api/v1/date.json");
$holidays = json_decode($json, true);
if (array_key_exists($today, $holidays)) {
echo $today . " は祝日(" . $holidays[$today] . ")です。";
} else {
echo $today . " は平日です。";
}
?>
このコードなら、最新の祝日を自動的に取得してくれるので便利です。
8. 曜日と祝日の組み合わせを活用しよう
曜日と祝日がわかると、たとえば「平日のみ予約を受け付ける」「土日祝はメッセージを変える」など、現実の業務にも応用できます。
例えば飲食店の定休日設定や、学校の出欠管理などにも活かせます。
まとめ
PHPで曜日や祝日を判定する方法について学ぶことで、日付処理の基本的な考え方と応用の可能性を広く理解することができました。
まず、PHPではDateTimeクラスを使うことで、日付や時間の情報を取得・操作できます。曜日を調べるには、format("l")やformat("w")を使って、英語または数字で曜日を取得し、それを人間が読める形に変換して表示するという流れがありました。
日本語で曜日を出したいときは、配列を使って曜日を対応させるという方法を取りました。これにより、直感的で見やすい出力が可能になります。たとえば、「2025年9月3日は水曜日です」と日本語で表示させることができ、ユーザーにとっても親しみやすい内容になります。
祝日判定に関しては、PHPに標準で備わっている機能では対応できないため、自作の祝日リストを配列で用意して照合する方法と、外部APIを活用する方法の2つが紹介されました。
自作の祝日リストは手軽に実装できますが、「ハッピーマンデー」や毎年変わる祝日に対応するには限界があります。一方、祝日APIを活用すれば、最新の祝日データをインターネットから自動取得できるため、メンテナンスの手間が大きく軽減されます。
実際のコード例では、file_get_contents()でAPIのJSONデータを取得し、json_decode()で配列に変換、array_key_exists()で祝日かどうかを判定するという流れでした。これらの知識を使えば、日付によってWebサイトやアプリの表示を切り替えることが可能になります。
たとえば、平日のみ受付する予約システムや、土日祝に定型メッセージを表示するカレンダーアプリ、または営業日ベースで通知を送信する業務システムなどにも活用できます。
最後に、日付処理を行う際には、タイムゾーンの考慮も重要です。東京と他の地域では時差がありますので、正確な時刻表示が求められるサービスでは、setTimezone()を使って地域に応じた時刻表示を行いましょう。
曜日と祝日の判定というテーマを通じて、PHPの基本的な日付操作から実践的なAPI連携までを学ぶことができました。こうした技術を丁寧に習得していくことで、実用性の高いWebサービスの構築に大きく近づきます。
祝日APIを使った実用例(復習)
<?php
$today = date("Y-m-d");
$json = file_get_contents("https://holidays-jp.github.io/api/v1/date.json");
$holidays = json_decode($json, true);
if (array_key_exists($today, $holidays)) {
echo $today . " は祝日(" . $holidays[$today] . ")です。";
} else {
echo $today . " は平日です。";
}
?>
このように、APIを活用すれば祝日の自動判定も簡単に実現できます。
生徒
「PHPで曜日を調べたり、祝日かどうかを判定できるって、すごく便利ですね!実務にも活かせそうです。」
先生
「そうですね。PHPのDateTimeクラスを使えば、日付処理はとても簡単にできます。しかもAPIと組み合わせると、祝日の管理も自動化できるんです。」
生徒
「曜日の配列とか、自作の祝日リストも試してみました。将来的にはAPIも使ってみたいと思いました!」
先生
「祝日APIは毎年の変更にも対応してくれるので、更新の手間も省けてとても便利です。ビジネス向けの機能にも役立ちますよ。」
生徒
「飲食店の予約サイトや勤怠管理システムとか、曜日と祝日を組み合わせた機能がいろいろ作れそうです!」
先生
「その通りです。基礎がしっかりしていれば、アイデア次第で実用的なアプリが作れます。これからも日付処理を活かしていきましょう!」