PHPで曜日や祝日を判定する方法!初心者でもわかる日付処理の基本ガイド
生徒
「先生、PHPで『この日付は何曜日か』とか『祝日かどうか』って調べることはできますか?」
先生
「はい、できますよ。PHPには日付を扱う機能がしっかり用意されているので、曜日も祝日もチェックできます。」
生徒
「プログラミング初心者でもできますか?複雑そうに感じます……」
先生
「大丈夫です!今回は超初心者の方でもわかるように、曜日と祝日の判定方法をやさしく丁寧に説明しますね。」
1. PHPで日付を扱うってどういうこと?
PHP(ピー・エイチ・ピー)では、日付や時間を簡単に扱えるようになっています。DateTimeクラスやdate()関数などが代表的な機能です。
「クラス」というのは、便利な道具がたくさん詰まった箱のようなもので、DateTimeクラスは「日付や時間を扱うための箱」と考えるとわかりやすいです。
2. PHPで曜日を判定する基本の書き方
まずは特定の日付が「何曜日か」を調べてみましょう。たとえば2025年9月3日が何曜日かを調べたいときのサンプルコードは以下のようになります。
<?php
$date = new DateTime("2025-09-03");
$weekday = $date->format("l");
echo "この日は " . $weekday . " です。";
?>
format("l")という部分は、「曜日を英語で出力してね」という意味です。たとえば"Wednesday"(水曜日)などが表示されます。
3. 日本語で曜日を表示する方法
英語ではなく「月曜日」「火曜日」など日本語で表示したい場合は、自分で配列(あらかじめデータを並べた表)を用意します。
<?php
$youbi = ["日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"];
$date = new DateTime("2025-09-03");
$index = $date->format("w");
echo "この日は " . $youbi[$index] . " です。";
?>
format("w")は、0〜6の数字で曜日を返します。0が日曜日、1が月曜日……6が土曜日というルールです。
4. PHPで祝日を判定するにはどうすればいい?
実はPHPには、最初から「この日が祝日かどうか」を判断する機能はありません。でも安心してください。
方法は2つあります:
- 自分で祝日リストを用意して判定する
- 祝日APIを使って判定する
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は毎年の変更にも対応してくれるので、更新の手間も省けてとても便利です。ビジネス向けの機能にも役立ちますよ。」
生徒
「飲食店の予約サイトや勤怠管理システムとか、曜日と祝日を組み合わせた機能がいろいろ作れそうです!」
先生
「その通りです。基礎がしっかりしていれば、アイデア次第で実用的なアプリが作れます。これからも日付処理を活かしていきましょう!」