PHPで曜日を取得するには、主に date() 関数や DateTime クラスを使います。
現在の曜日を簡単に取得したい場合は date()、指定日やタイムゾーンをしっかり扱いたい場合は DateTime を使うと便利です。
また、日本語で「月曜日」「火曜日」のように表示したい場合は、曜日番号を取得して配列で変換する方法がよく使われます。
この記事では、PHPで曜日を取得する基本的な方法から、日本語表示、指定日の曜日取得、平日・土日判定、WordPressでの取得方法まで詳しく解説します。
PHPで曜日を取得する基本
PHPで曜日を取得する代表的な方法は、次の2つです。
date()
DateTime
date() は、現在日時や指定したタイムスタンプをもとに、日付や曜日を文字列として取得できる関数です。
一方、DateTime は日付や時刻をオブジェクトとして扱えるクラスです。
指定日を扱ったり、タイムゾーンを明示したりする場合に便利です。
date()で曜日を取得する
現在の曜日を英語で取得する場合は、date('l') を使います。
echo date('l');
出力例は以下のようになります。
Sunday
date('l') の l は、曜日を英語のフル表記で取得するためのフォーマットです。
曜日は以下のように表示されます。
| 曜日 | 出力 |
|---|---|
| 日曜日 | Sunday |
| 月曜日 | Monday |
| 火曜日 | Tuesday |
| 水曜日 | Wednesday |
| 木曜日 | Thursday |
| 金曜日 | Friday |
| 土曜日 | Saturday |
曜日を短縮形で取得する
曜日を短縮形で取得したい場合は、date('D') を使います。
echo date('D');
出力例は以下のようになります。
Sun
date('D') では、曜日が3文字程度の英語表記で返されます。
| 曜日 | 出力 |
|---|---|
| 日曜日 | Sun |
| 月曜日 | Mon |
| 火曜日 | Tue |
| 水曜日 | Wed |
| 木曜日 | Thu |
| 金曜日 | Fri |
| 土曜日 | Sat |
フル表記と短縮表記は、次のように使い分けます。
echo date('l'); // Sunday
echo date('D'); // Sun
曜日を数値で取得する方法
PHPでは、曜日を文字列ではなく数値で取得することもできます。
曜日番号を取得すると、日本語の曜日へ変換したり、平日・土日を判定したりするときに便利です。
よく使うフォーマットは、次の2つです。
date('w')
date('N')
date(‘w’)で曜日番号を取得する
date('w') を使うと、曜日を 0〜6 の数値で取得できます。
echo date('w');
date('w') の曜日番号は以下の通りです。
| 数値 | 曜日 |
|---|---|
| 0 | 日曜日 |
| 1 | 月曜日 |
| 2 | 火曜日 |
| 3 | 水曜日 |
| 4 | 木曜日 |
| 5 | 金曜日 |
| 6 | 土曜日 |
たとえば、今日が日曜日であれば、以下のように表示されます。
0
date('w') は、日本語の曜日に変換するときによく使われます。
date(‘N’)でISO形式の曜日番号を取得する
date('N') を使うと、曜日を 1〜7 の数値で取得できます。
echo date('N');
date('N') の曜日番号は以下の通りです。
| 数値 | 曜日 |
|---|---|
| 1 | 月曜日 |
| 2 | 火曜日 |
| 3 | 水曜日 |
| 4 | 木曜日 |
| 5 | 金曜日 |
| 6 | 土曜日 |
| 7 | 日曜日 |
date('w') は日曜日が 0 ですが、date('N') は月曜日が 1、日曜日が 7 です。
そのため、平日か土日かを判定したい場合は、date('N') のほうが扱いやすいことがあります。
$dayOfWeek = date('N');
if ($dayOfWeek <= 5) {
echo '平日です';
} else {
echo '土日です';
}
日本語の曜日を取得する方法
PHPの date() 関数だけでは、標準で「日曜日」「月曜日」のような日本語の曜日は直接取得できません。
たとえば、次のように書くと、英語の曜日が表示されます。
echo date('l');
出力例です。
Sunday
日本語の曜日を表示したい場合は、date('w') で曜日番号を取得し、その番号を配列に当てはめる方法が一般的です。
配列を使って日本語の曜日に変換する
日本語の曜日を取得する基本形は、次の通りです。
$week = ['日', '月', '火', '水', '木', '金', '土'];
$dayOfWeek = date('w');
echo $week[$dayOfWeek];
出力例です。
日
「曜日」まで付けたい場合は、次のように書きます。
$week = ['日', '月', '火', '水', '木', '金', '土'];
$dayOfWeek = date('w');
echo $week[$dayOfWeek] . '曜日';
出力例です。
日曜日
date('w') は日曜日が 0、月曜日が 1、土曜日が 6 です。
そのため、配列は以下の順番で用意します。
$week = ['日', '月', '火', '水', '木', '金', '土'];
この並びを間違えると、表示される曜日もずれてしまうため注意しましょう。
現在の日付と曜日を表示する
現在の日付と曜日をまとめて表示したい場合は、次のように書けます。
$week = ['日', '月', '火', '水', '木', '金', '土'];
$dayOfWeek = date('w');
echo date('Y年n月j日') . '(' . $week[$dayOfWeek] . ')';
出力例です。
2026年6月7日(日)
日付を日本語形式で表示したい場合は、date('Y年n月j日') のように指定します。
Y は西暦4桁、n は月、j は日を表します。
echo date('Y年n月j日');
出力例です。
2026年6月7日
指定した日付の曜日を取得する方法
現在の日付ではなく、指定した日付の曜日を取得したい場合は、strtotime() と date() を組み合わせます。
strtotime()を使って指定日の曜日を取得する
たとえば、2026-06-07 の曜日を取得する場合は、次のように書きます。
$date = '2026-06-07';
$timestamp = strtotime($date);
$week = ['日', '月', '火', '水', '木', '金', '土'];
echo $week[date('w', $timestamp)] . '曜日';
出力例です。
日曜日
strtotime() は、日付文字列をUnixタイムスタンプに変換する関数です。
date() の第2引数にタイムスタンプを渡すことで、指定した日付の曜日を取得できます。
date('w', $timestamp)
このように書くと、指定日が何曜日かを数値で取得できます。
指定日の日付と曜日を表示する
指定した日付を「2026年6月7日(日)」のように表示したい場合は、次のように書きます。
$date = '2026-06-07';
$timestamp = strtotime($date);
$week = ['日', '月', '火', '水', '木', '金', '土'];
echo date('Y年n月j日', $timestamp) . '(' . $week[date('w', $timestamp)] . ')';
出力例です。
2026年6月7日(日)
strtotime()を使うときの注意点
strtotime() は便利ですが、不正な日付文字列を渡すと false を返すことがあります。
ユーザーが入力した日付や、外部データの日付を扱う場合は、失敗時のチェックを入れると安全です。
$date = '2026-06-07';
$timestamp = strtotime($date);
if ($timestamp === false) {
echo '日付の形式が正しくありません';
exit;
}
$week = ['日', '月', '火', '水', '木', '金', '土'];
echo $week[date('w', $timestamp)] . '曜日';
固定の日付をコード内で指定するだけであれば、シンプルな書き方でも問題ありません。
ただし、フォーム入力やCSVデータなど、日付の形式が不安定なデータを扱う場合は、エラーチェックを入れるのがおすすめです。
DateTimeで曜日を取得する方法
PHPでは、DateTime クラスを使って曜日を取得することもできます。
DateTime は、日付や時刻をオブジェクトとして扱えるため、指定日やタイムゾーンを扱う処理に向いています。
現在の曜日をDateTimeで取得する
現在の曜日を英語で取得する場合は、次のように書きます。
$date = new DateTime();
echo $date->format('l');
出力例です。
Sunday
短縮形で取得したい場合は、format('D') を使います。
$date = new DateTime();
echo $date->format('D');
出力例です。
Sun
DateTime::format() で使う曜日のフォーマットは、date() 関数と同じです。
$date = new DateTime();
echo $date->format('l'); // Sunday
echo $date->format('D'); // Sun
echo $date->format('w'); // 0
echo $date->format('N'); // 7
DateTimeで日本語の曜日を取得する
DateTime で日本語の曜日を表示したい場合も、曜日番号を取得して配列に当てはめます。
$date = new DateTime();
$week = ['日', '月', '火', '水', '木', '金', '土'];
$dayOfWeek = $date->format('w');
echo $week[$dayOfWeek] . '曜日';
出力例です。
日曜日
DateTime::format('w') も、date('w') と同じく、日曜日が 0、土曜日が 6 です。
ただし、配列の添字として使う場合は、整数にキャストしておくとよりわかりやすくなります。
$dayOfWeek = (int)$date->format('w');
DateTimeで指定日の曜日を取得する
指定した日付の曜日を取得する場合は、DateTime に日付文字列を渡します。
$date = new DateTime('2026-06-07');
$week = ['日', '月', '火', '水', '木', '金', '土'];
$dayOfWeek = (int)$date->format('w');
echo $week[$dayOfWeek] . '曜日';
出力例です。
日曜日
日付と曜日をまとめて表示する場合は、次のように書けます。
$date = new DateTime('2026-06-07');
$week = ['日', '月', '火', '水', '木', '金', '土'];
$dayOfWeek = (int)$date->format('w');
echo $date->format('Y年n月j日') . '(' . $week[$dayOfWeek] . ')';
出力例です。
2026年6月7日(日)
タイムゾーンを指定して曜日を取得する方法
PHPで曜日を取得するときは、タイムゾーンにも注意が必要です。
サーバーのタイムゾーンが日本時間以外に設定されていると、日本時間とは異なる日付・曜日が表示されることがあります。
特に、深夜や早朝の処理では、タイムゾーンの違いによって曜日が1日ずれる可能性があります。
date_default_timezone_set()を使う
日本時間で曜日を取得したい場合は、次のようにタイムゾーンを設定します。
date_default_timezone_set('Asia/Tokyo');
echo date('Y年n月j日 l');
日本語の曜日にする場合は、次のように書きます。
date_default_timezone_set('Asia/Tokyo');
$week = ['日', '月', '火', '水', '木', '金', '土'];
$dayOfWeek = date('w');
echo date('Y年n月j日') . '(' . $week[$dayOfWeek] . ')';
出力例です。
2026年6月7日(日)
date_default_timezone_set() は、スクリプト全体のデフォルトタイムゾーンを設定する関数です。
日本向けのWebサイトであれば、以下のように設定しておくと曜日のずれを防ぎやすくなります。
date_default_timezone_set('Asia/Tokyo');
DateTimeZoneを使う
DateTime を使う場合は、DateTimeZone でタイムゾーンを指定する方法もあります。
$timezone = new DateTimeZone('Asia/Tokyo');
$date = new DateTime('now', $timezone);
$week = ['日', '月', '火', '水', '木', '金', '土'];
$dayOfWeek = (int)$date->format('w');
echo $date->format('Y年n月j日') . '(' . $week[$dayOfWeek] . ')';
date_default_timezone_set() は、スクリプト全体に影響します。
一方、DateTimeZone は、特定の DateTime オブジェクトに対してタイムゾーンを指定できます。
そのため、実務では次のように使い分けるとよいでしょう。
| 方法 | 向いているケース |
|---|---|
date_default_timezone_set() | サイトや処理全体を日本時間で扱いたい場合 |
DateTimeZone | 特定の日付処理だけタイムゾーンを明示したい場合 |
IntlDateFormatterで日本語の曜日を取得する方法
PHPの intl 拡張機能が使える環境では、IntlDateFormatter を使って日本語の曜日を取得することもできます。
配列で変換する方法より少し高度ですが、ロケールに応じた日付表示を行いたい場合に便利です。
IntlDateFormatterで曜日を表示する
日本語の曜日を取得する例は、次の通りです。
$date = new DateTime('2026-06-07', new DateTimeZone('Asia/Tokyo'));
$formatter = new IntlDateFormatter(
'ja_JP',
IntlDateFormatter::FULL,
IntlDateFormatter::NONE,
'Asia/Tokyo',
IntlDateFormatter::GREGORIAN,
'EEEE'
);
echo $formatter->format($date);
出力例です。
日曜日
EEEE は、曜日をフル表記で取得するためのパターンです。
日本語ロケールで指定しているため、「日曜日」のように日本語で表示されます。
短い曜日表記を取得する
短い曜日表記にしたい場合は、パターンに E を指定します。
$date = new DateTime('2026-06-07', new DateTimeZone('Asia/Tokyo'));
$formatter = new IntlDateFormatter(
'ja_JP',
IntlDateFormatter::FULL,
IntlDateFormatter::NONE,
'Asia/Tokyo',
IntlDateFormatter::GREGORIAN,
'E'
);
echo $formatter->format($date);
出力例です。
日
IntlDateFormatter を使うには、サーバーで intl 拡張機能が有効になっている必要があります。
一般的なWeb制作やシンプルな曜日表示であれば、配列で日本語に変換する方法のほうがわかりやすく、扱いやすいです。
曜日取得に使うフォーマット一覧
PHPで曜日を取得するときによく使うフォーマットを整理すると、次のようになります。
| フォーマット | 内容 | 出力例 |
|---|---|---|
l | 英語の曜日フル表記 | Sunday |
D | 英語の曜日短縮表記 | Sun |
w | 日曜日を0とする曜日番号 | 0〜6 |
N | 月曜日を1とするISO形式の曜日番号 | 1〜7 |
使い方の例は以下の通りです。
echo date('l'); // Sunday
echo date('D'); // Sun
echo date('w'); // 0
echo date('N'); // 7
date(‘w’)とdate(‘N’)の違い
date('w') と date('N') は、どちらも曜日番号を取得できますが、数値の割り当てが異なります。
date('w') は、日曜日が 0 です。
echo date('w');
| 数値 | 曜日 |
|---|---|
| 0 | 日曜日 |
| 1 | 月曜日 |
| 2 | 火曜日 |
| 3 | 水曜日 |
| 4 | 木曜日 |
| 5 | 金曜日 |
| 6 | 土曜日 |
一方、date('N') は、月曜日が 1、日曜日が 7 です。
echo date('N');
| 数値 | 曜日 |
|---|---|
| 1 | 月曜日 |
| 2 | 火曜日 |
| 3 | 水曜日 |
| 4 | 木曜日 |
| 5 | 金曜日 |
| 6 | 土曜日 |
| 7 | 日曜日 |
日本語の曜日配列に当てはめる場合は、date('w') が使いやすいです。
$week = ['日', '月', '火', '水', '木', '金', '土'];
echo $week[date('w')];
平日・土日判定では、date('N') が便利です。
if (date('N') <= 5) {
echo '平日';
} else {
echo '土日';
}
日本語曜日を取得する関数を作る方法
同じ処理を何度も使う場合は、日本語の曜日を取得する関数を作っておくと便利です。
date()を使った関数
シンプルに作るなら、次のように書けます。
function getJapaneseDayOfWeek(?string $date = null): string
{
$week = ['日', '月', '火', '水', '木', '金', '土'];
$timestamp = $date === null ? time() : strtotime($date);
if ($timestamp === false) {
return '日付の形式が正しくありません';
}
return $week[date('w', $timestamp)] . '曜日';
}
echo getJapaneseDayOfWeek();
echo getJapaneseDayOfWeek('2026-06-07');
出力例です。
日曜日
日曜日
引数を省略した場合は現在の曜日を返し、日付を指定した場合はその日付の曜日を返します。
echo getJapaneseDayOfWeek(); // 現在の曜日
echo getJapaneseDayOfWeek('2026-06-07'); // 指定日の曜日
DateTimeを使った関数
より実務向けに書くなら、DateTime と DateTimeZone を使う方法もあります。
function getJapaneseDayOfWeek(?string $date = null): string
{
$week = ['日', '月', '火', '水', '木', '金', '土'];
$timezone = new DateTimeZone('Asia/Tokyo');
try {
$datetime = $date === null
? new DateTime('now', $timezone)
: new DateTime($date, $timezone);
} catch (Exception $e) {
return '日付の形式が正しくありません';
}
return $week[(int)$datetime->format('w')] . '曜日';
}
echo getJapaneseDayOfWeek();
echo getJapaneseDayOfWeek('2026-06-07');
DateTime を使うと、タイムゾーンを明示しやすくなります。
日付処理を複数扱う場合や、システム内で日時を正確に管理したい場合は、DateTime を使った書き方がおすすめです。
平日・土日を判定する方法
曜日を取得できるようになると、平日か土日かを判定する処理も書けます。
平日・土日判定には、date('N') を使うとわかりやすいです。
現在の日付が平日か土日か判定する
現在の日付が平日か土日かを判定する場合は、次のように書きます。
$dayOfWeek = date('N');
if ($dayOfWeek <= 5) {
echo '平日です';
} else {
echo '土日です';
}
date('N') は、月曜日が 1、金曜日が 5、土曜日が 6、日曜日が 7 です。
そのため、5 以下であれば平日、6 以上であれば土日と判定できます。
指定日が平日か土日か判定する
指定した日付で判定する場合は、strtotime() を組み合わせます。
$date = '2026-06-07';
$timestamp = strtotime($date);
if ($timestamp === false) {
echo '日付の形式が正しくありません';
exit;
}
$dayOfWeek = date('N', $timestamp);
if ($dayOfWeek <= 5) {
echo '平日です';
} else {
echo '土日です';
}
出力例です。
土日です
土曜日と日曜日を分けて判定する
土曜日と日曜日を分けて判定したい場合は、date('w') を使うとわかりやすいです。
$dayOfWeek = date('w');
if ($dayOfWeek == 0) {
echo '日曜日です';
} elseif ($dayOfWeek == 6) {
echo '土曜日です';
} else {
echo '平日です';
}
指定した日付で判定する場合は、次のように書きます。
$date = '2026-06-07';
$timestamp = strtotime($date);
if ($timestamp === false) {
echo '日付の形式が正しくありません';
exit;
}
$dayOfWeek = date('w', $timestamp);
if ($dayOfWeek == 0) {
echo '日曜日です';
} elseif ($dayOfWeek == 6) {
echo '土曜日です';
} else {
echo '平日です';
}
WordPressで曜日を取得する方法
WordPressで曜日を取得する場合は、PHP標準の date() よりも、WordPressの wp_date() を使うのがおすすめです。
wp_date() は、WordPressのタイムゾーン設定やロケール設定を考慮して日付を取得できます。
wp_date()で曜日を取得する
WordPressで現在の曜日を取得する場合は、次のように書きます。
echo wp_date('l');
日本語ロケールのWordPressであれば、次のように表示されます。
日曜日
短い曜日表記を取得したい場合は、D を使います。
echo wp_date('D');
日本語ロケールであれば、次のように表示されます。
日
PHP標準の date('l') は英語の曜日を返しますが、WordPressの wp_date() はサイトのロケール設定に応じて曜日名が翻訳される点が特徴です。
WordPressで日付と曜日を表示する
WordPressで「2026年6月7日(日)」のように表示したい場合は、次のように書けます。
echo wp_date('Y年n月j日(D)');
日本語ロケールであれば、出力例は以下のようになります。
2026年6月7日(日)
独自の配列を使って曜日を表示する場合は、次のように書くこともできます。
$week = ['日', '月', '火', '水', '木', '金', '土'];
$dayOfWeek = (int) wp_date('w');
echo wp_date('Y年n月j日') . '(' . $week[$dayOfWeek] . ')';
WordPressサイト内で曜日を表示するだけなら、基本的には wp_date() を使う方法がシンプルです。
PHPで曜日を取得するときの注意点
PHPで曜日を取得する処理はシンプルですが、いくつか注意したいポイントがあります。
date()だけでは日本語曜日にならない
PHP標準の date() や DateTime::format() は、ロケールに応じて自動的に日本語の曜日を返すわけではありません。
次のように書いても、表示されるのは英語の曜日です。
echo date('l');
出力例です。
Sunday
日本語で表示したい場合は、配列で変換するか、IntlDateFormatter を使いましょう。
$week = ['日', '月', '火', '水', '木', '金', '土'];
echo $week[date('w')] . '曜日';
date(‘w’)とdate(‘N’)を混同しない
date('w') と date('N') は、曜日番号の割り当てが異なります。
date('w'); // 日曜日が0、土曜日が6
date('N'); // 月曜日が1、日曜日が7
日本語曜日の配列に使うなら、基本的には date('w') を使うとわかりやすいです。
$week = ['日', '月', '火', '水', '木', '金', '土'];
echo $week[date('w')];
平日・土日判定には、date('N') が便利です。
if (date('N') <= 5) {
echo '平日';
} else {
echo '土日';
}
用途によって使い分けることが大切です。
タイムゾーンを確認する
曜日が想定とずれる場合は、タイムゾーンの設定を確認しましょう。
date_default_timezone_set('Asia/Tokyo');
サーバーがUTCなどで動いている場合、日本時間とは日付が異なることがあります。
たとえば、日本ではすでに月曜日でも、サーバーのタイムゾーンではまだ日曜日というケースがあります。
その場合、曜日もずれて表示されます。
日本向けのWebサイトやアプリケーションでは、Asia/Tokyo を明示しておくと安心です。
不正な日付文字列に注意する
指定日の曜日を取得するときに strtotime() を使う場合、不正な日付文字列を渡すと失敗する可能性があります。
$timestamp = strtotime($date);
安全に処理するなら、次のようにチェックを入れましょう。
if ($timestamp === false) {
echo '日付の形式が正しくありません';
exit;
}
ユーザー入力の日付を扱う場合は、特に注意が必要です。
実務でおすすめの書き方
最後に、実務で使いやすいコードを用途別にまとめます。
現在の日本語曜日を取得する
現在の曜日を日本語で表示するだけなら、次のコードで十分です。
date_default_timezone_set('Asia/Tokyo');
$week = ['日', '月', '火', '水', '木', '金', '土'];
echo $week[date('w')] . '曜日';
出力例です。
日曜日
現在の日付と曜日を表示する
現在の日付と曜日をまとめて表示したい場合は、次のように書きます。
date_default_timezone_set('Asia/Tokyo');
$week = ['日', '月', '火', '水', '木', '金', '土'];
echo date('Y年n月j日') . '(' . $week[date('w')] . ')';
出力例です。
2026年6月7日(日)
指定日の曜日を取得する
指定した日付の曜日を取得する場合は、次のように書きます。
$date = '2026-06-07';
$timestamp = strtotime($date);
if ($timestamp === false) {
echo '日付の形式が正しくありません';
exit;
}
$week = ['日', '月', '火', '水', '木', '金', '土'];
echo $week[date('w', $timestamp)] . '曜日';
出力例です。
日曜日
DateTimeで指定日の曜日を取得する
DateTime を使って、タイムゾーンも明示する場合は次のように書きます。
$date = '2026-06-07';
$timezone = new DateTimeZone('Asia/Tokyo');
try {
$datetime = new DateTime($date, $timezone);
$week = ['日', '月', '火', '水', '木', '金', '土'];
$dayOfWeek = (int)$datetime->format('w');
echo $datetime->format('Y年n月j日') . '(' . $week[$dayOfWeek] . ')';
} catch (Exception $e) {
echo '日付の形式が正しくありません';
}
出力例です。
2026年6月7日(日)
シンプルな処理なら date() で十分ですが、日付をオブジェクトとして扱いたい場合や、タイムゾーンを明確にしたい場合は DateTime を使うとよいでしょう。
まとめ
PHPで曜日を取得するには、date() 関数や DateTime クラスを使います。
英語の曜日を取得するだけなら、次のように書けます。
echo date('l');
短縮形で取得する場合は、次のようにします。
echo date('D');
日本語の曜日を表示したい場合は、date('w') で曜日番号を取得し、配列で変換する方法が簡単です。
$week = ['日', '月', '火', '水', '木', '金', '土'];
echo $week[date('w')] . '曜日';
指定した日付の曜日を取得する場合は、strtotime() と組み合わせます。
$date = '2026-06-07';
$timestamp = strtotime($date);
$week = ['日', '月', '火', '水', '木', '金', '土'];
echo $week[date('w', $timestamp)] . '曜日';
ただし、strtotime() は不正な日付文字列を渡すと失敗する可能性があるため、ユーザー入力を扱う場合はエラーチェックを入れると安全です。
また、日本向けのサイトでは、タイムゾーンの設定も重要です。
date_default_timezone_set('Asia/Tokyo');
WordPressで曜日を取得する場合は、サイトのタイムゾーンやロケールを考慮できる wp_date() を使うのがおすすめです。
echo wp_date('Y年n月j日(D)');
PHPで曜日を扱うときは、date('w') と date('N') の違い、日本語表示の方法、タイムゾーンの設定を押さえておくと、実務でもミスを防ぎやすくなります。
以上、PHPで曜日を取得する方法についてでした。
最後までお読みいただき、ありがとうございました。










