PHPで曜日を取得する方法について

採用はこちら

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とする曜日番号06
N月曜日を1とするISO形式の曜日番号17

使い方の例は以下の通りです。

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を使った関数

より実務向けに書くなら、DateTimeDateTimeZone を使う方法もあります。

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で曜日を取得する方法についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次