PHPで日本語の曜日を表示する方法を解説!配列を使った曜日変換の定番コード
生徒
「PHPで今日の日付を表示できたのですが、曜日が英語になってしまいます。日本語の曜日を表示できますか?」
先生
「PHPでは、曜日を表す数字と日本語の曜日を入れた配列を組み合わせることで、月曜日や火曜日のように表示できます。」
生徒
「配列を使うのは難しくありませんか?」
先生
「曜日は七種類だけなので、配列の基本を覚える題材としても分かりやすいです。日付と曜日の仕組みから順番に確認していきましょう。」
1. PHPで日本語の曜日を表示する仕組み
PHPで日付や時刻を扱うときは、DateTimeクラスを利用できます。クラスとは、日付の作成、表示形式の変更、日付の計算など、関連する機能をひとまとめにした道具箱のようなものです。DateTimeクラスを使うと、現在の日付だけでなく、指定した日付の曜日も簡単に調べられます。
ただし、PHPが返す曜日は、そのままでは日本語にならない場合があります。例えば、曜日を短い英語で取得すると、月曜日はMon、火曜日はTueと表示されます。日本語のウェブサイトや予約画面では、英語の曜日よりも「月曜日」や「火曜日」と表示したほうが利用者に伝わりやすくなります。
そこでよく使われるのが、曜日を表す数字を取得し、その数字を配列の位置として利用する方法です。PHPでは、日曜日をゼロ、月曜日を一、火曜日を二というように、曜日を数字で取得できます。その数字と日本語の曜日を入れた配列を対応させれば、日本語の曜日へ変換できます。
2. DateTimeクラスで現在の日付と曜日を取得する
最初に、PHPのDateTimeクラスを使って、現在の日付と曜日を取得してみましょう。new DateTime()と書くと、プログラムが実行された時点の日付と時刻を持つデータが作成されます。ここで使われるnewは、クラスから実際に利用できるデータを作るための命令です。
作成した日付は、変数に保存します。変数とは、値を一時的に入れておく名前付きの箱です。次のコードでは、日付のデータを$dateという変数へ保存しています。
$date = new DateTime();
echo $date->format('Y年m月d日');
echo '<br>';
echo $date->format('w');
formatメソッドは、日付の表示形式を指定する機能です。メソッドとは、クラスに用意されている処理のことです。Yは西暦の年、mは二桁の月、dは二桁の日を表します。wを指定すると、曜日をゼロから六までの数字で取得できます。
例えば、プログラムを実行した日が二千二十六年九月十五日の火曜日だった場合、実行結果は次のようになります。
2026年09月15日
2
画面に表示された二は、火曜日を表しています。この段階では数字なので、利用者が見ても何曜日なのかすぐには分かりません。次の手順で、この数字を日本語の曜日に変換します。
3. 曜日を表す数字と配列の関係
PHPのformat('w')で取得できる曜日の数字は、日曜日から順番にゼロ、月曜日が一、火曜日が二、水曜日が三、木曜日が四、金曜日が五、土曜日が六となっています。日曜日が一ではなくゼロから始まることが重要です。
PHPの配列も、特別な番号を指定しなければ最初の要素がゼロ番目になります。要素とは、配列の中に保存されている一つ一つの値です。この仕組みを利用して、ゼロ番目に日曜日、一番目に月曜日、二番目に火曜日を保存します。
| 曜日の数字 | 配列の位置 | 日本語の曜日 |
|---|---|---|
| 0 | 0番目 | 日曜日 |
| 1 | 1番目 | 月曜日 |
| 2 | 2番目 | 火曜日 |
| 3 | 3番目 | 水曜日 |
| 4 | 4番目 | 木曜日 |
| 5 | 5番目 | 金曜日 |
| 6 | 6番目 | 土曜日 |
曜日の数字と配列の位置が同じになるように並べることがポイントです。例えば、format('w')の結果が二なら、配列の二番目に入っている「火曜日」を取り出せます。このように、数字を別の分かりやすい文字へ置き換える処理を変換と呼びます。
配列の並びを月曜日から始めてしまうと、PHPが返す曜日の数字と位置が一致しません。月曜日に日曜日と表示されるような間違いにつながるため、配列は必ず日曜日から並べましょう。
4. 配列を使って現在の曜日を日本語で表示する
それでは、PHPで現在の曜日を日本語表示する定番コードを確認しましょう。最初に日本語の曜日を保存した配列を作成し、次にDateTimeクラスで現在の日付を取得します。最後に曜日の数字を配列の位置へ指定します。
$weekdays = [
'日曜日',
'月曜日',
'火曜日',
'水曜日',
'木曜日',
'金曜日',
'土曜日'
];
$date = new DateTime();
$weekdayNumber = (int) $date->format('w');
echo $weekdays[$weekdayNumber];
$weekdaysは、日本語の曜日を保存した配列です。角括弧の中へ、日曜日から土曜日までを順番に記述しています。文字はシングルクォーテーションで囲み、それぞれをカンマで区切ります。
$weekdayNumberには、現在の曜日を表す数字が保存されます。先頭に書かれている(int)は、取得した値を整数として扱うための指定です。整数とは、小数点を含まない数字のことです。曜日の番号はゼロから六までなので、整数として扱うと目的が分かりやすくなります。
$weekdays[$weekdayNumber]では、取得した曜日番号と同じ位置にある配列の要素を取り出しています。現在が火曜日なら曜日番号は二になり、配列の二番目にある「火曜日」が表示されます。
火曜日
この書き方では、複雑な条件分岐を何度も記述する必要がありません。曜日ごとにif文を書く方法もありますが、七つの条件が必要になり、コードが長くなります。配列を使えば、曜日の対応関係が一か所にまとまり、後から確認するときにも読みやすくなります。
5. 指定した日付の曜日を日本語で表示する
現在の曜日だけでなく、誕生日、予約日、イベント開催日など、指定した日付の曜日を調べることもできます。DateTimeの丸括弧の中へ、調べたい日付を西暦、月、日の順番で指定します。
次のサンプルでは、二千二十六年十二月二十五日の曜日を日本語で表示しています。日付は2026-12-25のように、年、月、日をハイフンで区切って指定しています。
$weekdays = [
'日曜日',
'月曜日',
'火曜日',
'水曜日',
'木曜日',
'金曜日',
'土曜日'
];
$date = new DateTime('2026-12-25');
$weekdayNumber = (int) $date->format('w');
echo $date->format('Y年m月d日');
echo 'は';
echo $weekdays[$weekdayNumber];
echo 'です。';
2026年12月25日は金曜日です。
この方法は、カレンダー、予約システム、営業日の案内、学校の時間割、イベント情報などで利用できます。日付を変更しても曜日は自動的に計算されるため、自分でカレンダーを見ながら曜日を入力する必要はありません。
曜日を手作業で入力すると、日付だけを変更して曜日を直し忘れる可能性があります。PHPのDateTimeクラスを使って曜日を計算すれば、日付と曜日の食い違いを防ぎやすくなります。日付を扱うウェブアプリケーションでは、このように元の日付から必要な情報を自動的に取得する設計が大切です。
6. 日付と日本語の短い曜日を一緒に表示する
ウェブサイトでは、「二千二十六年九月十五日火曜日」のような長い表記だけでなく、「二千二十六年九月十五日火」のように、曜日を一文字で表示することもあります。カレンダーや予約一覧では表示できる横幅が限られるため、短い曜日表記が便利です。
短い曜日を表示したい場合も、基本的な考え方は変わりません。配列へ「日曜日」ではなく「日」のような一文字を保存します。表示するときに丸括弧を加えると、日本でよく見かける日付表記になります。
$shortWeekdays = ['日', '月', '火', '水', '木', '金', '土'];
$date = new DateTime('2026-09-15');
$weekdayNumber = (int) $date->format('w');
echo $date->format('Y年m月d日');
echo '(' . $shortWeekdays[$weekdayNumber] . ')';
2026年09月15日(火)
文字列をつなげるときは、ピリオドを使います。文字列とは、画面に表示する文章や文字のまとまりです。上のコードでは、開始の丸括弧、配列から取得した曜日、終了の丸括弧をピリオドで連結しています。
一文字の曜日と完全な曜日名のどちらが適切かは、表示する場所によって変わります。記事本文や詳しい案内では「火曜日」のような完全な表記が分かりやすく、カレンダーや一覧表では「火」のような短い表記が見やすくなります。利用者が迷わず理解できる表記を選ぶことが大切です。
7. タイムゾーンを指定して日本時間の曜日を表示する
PHPで現在の日付や曜日を表示するときは、タイムゾーンにも注意が必要です。タイムゾーンとは、世界の地域ごとに定められている標準時の区分です。日本と海外では時刻が異なるため、サーバーの設定が海外の時刻になっていると、日本では日付が変わったのに前日の曜日が表示されることがあります。
例えば、日本では月曜日の午前でも、サーバーが利用している地域によっては、まだ日曜日として扱われる場合があります。このずれを防ぐには、DateTimeZoneを使って日本のタイムゾーンを明示します。日本のタイムゾーン名はAsia/Tokyoです。
$weekdays = ['日曜日', '月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日'];
$timezone = new DateTimeZone('Asia/Tokyo');
$date = new DateTime('now', $timezone);
$weekdayNumber = (int) $date->format('w');
echo $date->format('Y年m月d日 H時i分');
echo ' ';
echo $weekdays[$weekdayNumber];
nowは現在という意味です。二つ目の引数として$timezoneを渡すことで、日本時間を使った現在日時が作成されます。引数とは、処理を実行するときに渡す追加情報のことです。
Hは二十四時間表記の時、iは分を表します。分に使われる記号がmではなくiである点に注意しましょう。mは月を表すため、分には使用できません。
8. 曜日がずれるときに確認するポイント
PHPで日本語の曜日を表示したときに、期待した曜日と異なる場合は、いくつかの点を順番に確認します。最初に確認したいのは、配列の並び順です。format('w')では日曜日がゼロになるため、配列の最初には必ず日曜日を入れます。
次に、指定した日付の書き方を確認します。日付は、年、月、日の順番で入力するのが分かりやすい方法です。月と日を逆に入力すると、別の日付として処理されたり、入力内容によってはエラーになったりします。初心者のうちは、2026-09-15のように西暦を四桁で記述し、月と日を二桁でそろえると確認しやすくなります。
現在の曜日だけがずれる場合は、タイムゾーンを確認します。レンタルサーバーや開発環境によっては、最初から日本時間に設定されていることもありますが、プログラム側でAsia/Tokyoを明示すると、使用する地域がコードから分かるようになります。
また、曜日番号を取得するときは、小文字のwを使用します。大文字と小文字を区別する必要があり、似ている別の書式文字を指定すると期待した結果になりません。PHPのformatメソッドでは、指定する一文字ごとに意味が決められています。
問題の原因が分からないときは、完成した日本語の曜日だけを見るのではなく、format('w')の結果も一度表示してみましょう。数字が正しいのに日本語の曜日が違う場合は配列を確認し、数字そのものが違う場合は日付やタイムゾーンを確認します。処理を小さな部分に分けて出力すると、どこで間違っているのか見つけやすくなります。
- 曜日の配列が日曜日から始まっているか
- 曜日番号の取得に小文字の
wを使っているか - 指定した年月日が正しい順番になっているか
- 日本時間のタイムゾーンが設定されているか
- 配列の曜日名が曜日番号と対応しているか
9. 日本語の曜日表示を関数にまとめる方法
同じウェブサイトの複数の場所で日本語の曜日を表示する場合は、処理を関数にまとめると便利です。関数とは、複数の処理を一つの名前で呼び出せるようにまとめたものです。料理で例えると、毎回材料の準備から説明するのではなく、料理名を伝えるだけで決められた手順を実行する仕組みに似ています。
次のコードでは、日付を受け取って日本語の曜日を返すgetJapaneseWeekday関数を作成しています。一度関数を用意すれば、異なる日付でも同じ曜日変換の処理を繰り返し利用できます。
function getJapaneseWeekday(DateTime $date): string
{
$weekdays = [
'日曜日',
'月曜日',
'火曜日',
'水曜日',
'木曜日',
'金曜日',
'土曜日'
];
$weekdayNumber = (int) $date->format('w');
return $weekdays[$weekdayNumber];
}
$birthday = new DateTime('2000-04-10');
$eventDate = new DateTime('2026-11-03');
echo '誕生日は' . getJapaneseWeekday($birthday) . 'です。';
echo '<br>';
echo 'イベント開催日は' . getJapaneseWeekday($eventDate) . 'です。';
誕生日は月曜日です。
イベント開催日は火曜日です。
returnは、関数で作った結果を呼び出し元へ返すための命令です。この関数では、受け取った日付から曜日番号を取得し、配列に保存されている日本語の曜日を返しています。
関数名を見れば、日本語の曜日を取得する処理だと判断できます。同じ配列と変換処理を何度も書かなくてよいため、コードの重複を減らせます。曜日名を「月曜日」から「月曜」へ変更したい場合も、関数内の配列を直すだけで対応できます。
PHPで曜日を日本語に変換する基本は、DateTimeで日付を作成し、format('w')で曜日番号を取得して、日本語の曜日を保存した配列から対応する値を取り出すことです。この流れを理解しておけば、現在日時、指定日、予約日、イベント日など、さまざまな日付に同じ方法を利用できます。
まとめ
PHPで日本語の曜日を表示するときは、DateTimeクラスで日付を作成し、formatメソッドで曜日番号を取得して、日本語の曜日を保存した配列から対応する要素を取り出します。現在の日付だけでなく、誕生日、予約日、イベント開催日、商品の発送予定日など、指定した日付の曜日も同じ仕組みで表示できます。
PHPの日付と時刻の操作は、最初は覚える記号が多いように感じるかもしれません。しかし、日本語の曜日を表示する処理は、日付を用意する、曜日番号を取得する、配列から曜日名を取り出すという三つの流れに分けると理解しやすくなります。すべてを一度に覚えようとせず、それぞれの処理が何をしているのかを順番に確認することが大切です。
PHPで日本語の曜日を表示する基本の流れ
PHPのDateTimeクラスは、日付と時刻を扱うために用意された機能です。new DateTime()と記述すると、プログラムを実行した時点の現在日時を持つデータが作られます。過去や未来の曜日を調べたい場合は、new DateTime('2026-12-25')のように、丸括弧の中へ調べたい日付を指定します。
作成した日付に対してformat('w')を実行すると、曜日を表す番号を取得できます。この番号は、日曜日がゼロ、月曜日が一、火曜日が二、水曜日が三、木曜日が四、金曜日が五、土曜日が六です。曜日番号は利用者へ直接見せるための値ではなく、プログラムの中で曜日を判断するために使います。
一方、PHPの配列は、複数の値を一つの変数へ順番に保存できる仕組みです。通常の配列では最初の要素にゼロという番号が付き、その次の要素には一、その次には二という番号が付きます。そのため、配列のゼロ番目に日曜日、一番目に月曜日、二番目に火曜日を保存すれば、format('w')で取得した番号をそのまま配列の位置として利用できます。
現在の日付を日本語の曜日付きで表示する定番コード
現在の日付と日本語の曜日を一緒に表示する場合は、次のように記述できます。日本向けのウェブサイトで使用することを考えて、DateTimeZoneで日本時間を指定しています。タイムゾーンを明示しておけば、サーバーが海外の時刻を基準にしている場合でも、日本の日付と曜日を取得しやすくなります。
$weekdays = [
'日曜日',
'月曜日',
'火曜日',
'水曜日',
'木曜日',
'金曜日',
'土曜日'
];
$timezone = new DateTimeZone('Asia/Tokyo');
$date = new DateTime('now', $timezone);
$weekdayNumber = (int) $date->format('w');
$japaneseWeekday = $weekdays[$weekdayNumber];
echo $date->format('Y年m月d日');
echo 'は';
echo $japaneseWeekday;
echo 'です。';
例えば、現在の日付が二千二十六年九月十五日であれば、実行結果は次のようになります。日付の後ろに日本語の曜日が付くため、ブログの更新日、予約画面、営業日の案内、行事予定などにも利用しやすい表示です。
2026年09月15日は火曜日です。
このコードでは、最初に日本語の曜日を配列へ保存しています。次に、日本時間を表すタイムゾーンと現在日時を作成し、曜日番号を取得しています。最後に、その番号を使って配列から日本語の曜日を取り出しています。処理の順番を一行ずつ追いかけると、曜日変換の仕組みが見えやすくなります。
(int)は、取得した曜日番号を整数として扱うための指定です。整数とは、小数点を含まない数字です。配列の位置には数字を使用するため、整数に変換していることをコード上で示すと、何のための値なのかが分かりやすくなります。
短い曜日表記と完全な曜日名の使い分け
日本語の曜日には、「月曜日」のような完全な表記と、「月」のような一文字の表記があります。記事本文、営業案内、イベントの詳細画面など、説明を分かりやすく伝えたい場所では完全な曜日名が適しています。一方、カレンダー、予約一覧、勤務表など、限られた横幅に多くの情報を並べる画面では、一文字の曜日表記が便利です。
表示を短くしたい場合は、配列の中身を変更するだけで対応できます。曜日番号を取得する部分は変える必要がありません。日付を取得する処理と、画面に表示する文字を分けて考えると、同じ仕組みをさまざまな画面で再利用できます。
$shortWeekdays = ['日', '月', '火', '水', '木', '金', '土'];
$date = new DateTime('2026-12-25');
$weekdayNumber = (int) $date->format('w');
echo $date->format('Y年m月d日');
echo '(' . $shortWeekdays[$weekdayNumber] . ')';
2026年12月25日(金)
このように、配列を使った曜日変換では、表示したい曜日名を差し替えやすいという利点があります。「金曜日」「金曜」「金」のように、画面の目的に合った表記を選択できます。日付を調べる仕組みは同じままなので、曜日ごとに別々の条件分岐を作る必要もありません。
配列を使うと曜日変換が分かりやすくなる理由
曜日を日本語に変換する処理は、if文やswitch文を使って作ることもできます。しかし、日曜日から土曜日までの条件を一つずつ記述すると、コードが長くなります。曜日の追加はありませんが、表記を変更するときには複数の場所を確認しなければならないこともあります。
配列を使う方法では、日本語の曜日が一か所にまとまります。曜日番号と配列の位置を対応させるだけなので、処理が短く、PHP初心者にも関係が見えやすくなります。日本語の曜日を変更したい場合も、配列の文字を修正するだけです。このように、同じ種類のデータを順番に管理したい場面では、配列が役立ちます。
配列の番号はゼロから始まるため、最初は違和感を持つことがあります。しかし、曜日番号も日曜日をゼロとして返されるので、今回の曜日変換では相性のよい組み合わせです。曜日番号が二なら配列の二番目、曜日番号が六なら配列の六番目というように、同じ数字を使って日本語の曜日を取り出せます。
曜日が正しく表示されない場合の確認方法
PHPで日本語の曜日がずれる場合は、最初に曜日の配列が日曜日から始まっているか確認します。月曜日から始めると、format('w')の番号と配列の位置が一致しません。曜日名は、日曜日、月曜日、火曜日、水曜日、木曜日、金曜日、土曜日の順番で保存します。
次に、日付の指定内容を確認します。指定した日付の曜日を取得する場合は、西暦、月、日の順番で記述すると分かりやすくなります。例えば、二千二十六年十一月三日なら、2026-11-03と指定します。月と日を逆に入力したり、西暦を間違えたりすると、正しい曜日は表示されません。
現在の日付だけがずれる場合は、タイムゾーンを確認します。パソコンの時刻が正しくても、PHPを実行しているサーバーが同じ時刻を利用しているとは限りません。日本時間で処理する場合は、Asia/Tokyoを指定します。特に日付が変わる深夜の時間帯では、タイムゾーンの違いによって前日または翌日の曜日が表示されることがあります。
原因を探すときは、完成した文章だけでなく、曜日番号を単独で表示して確認する方法も有効です。曜日番号が正しいのに日本語の曜日が間違っているなら、配列の並び順を確認します。曜日番号そのものが間違っているなら、指定した日付やタイムゾーンを確認します。このように処理の途中にある値を表示すると、問題が起きている場所を絞り込めます。
DateTimeクラスで現在または指定した日付を作成するformat('w')で日曜日をゼロとする曜日番号を取得する- 曜日の配列を日曜日から土曜日まで正しい順番で用意する
- 取得した曜日番号を配列の位置として使用する
- 日本時間が必要な場合は
Asia/Tokyoを指定する - 表示場所に応じて完全な曜日名と短い曜日表記を使い分ける
関数にまとめて日本語の曜日変換を再利用する
予約一覧、イベント詳細、記事の公開日など、複数の場所で日本語の曜日を表示する場合は、曜日変換を関数にまとめると管理しやすくなります。関数に日付を渡すだけで日本語の曜日が返るようにすれば、配列と曜日番号の取得処理を何度も記述する必要がありません。
function getJapaneseWeekday(DateTime $date): string
{
$weekdays = [
'日曜日',
'月曜日',
'火曜日',
'水曜日',
'木曜日',
'金曜日',
'土曜日'
];
$weekdayNumber = (int) $date->format('w');
return $weekdays[$weekdayNumber];
}
$reservationDate = new DateTime('2026-10-10');
echo 'ご予約日は';
echo $reservationDate->format('Y年m月d日');
echo 'の';
echo getJapaneseWeekday($reservationDate);
echo 'です。';
ご予約日は2026年10月10日の土曜日です。
関数にまとめると、曜日変換のコードを一か所で管理できます。曜日の表示を「土曜日」から「土曜」へ変更したい場合も、関数内の配列を修正するだけで済みます。同じ処理を何度も書かないため、入力間違いや修正漏れも防ぎやすくなります。
PHPで日本語の曜日を表示する中心となる考え方は、曜日番号と配列の位置を対応させることです。DateTimeクラス、formatメソッド、配列、変数、関数というPHPの基本機能が一つの処理に含まれているため、日付操作だけでなく、PHPプログラミングの基礎を理解する練習にもなります。
現在の曜日を表示するときも、指定日の曜日を調べるときも、基本的なコードの流れは変わりません。日付を作成し、曜日番号を取得し、対応する日本語の曜日を取り出します。この順番を理解しておけば、営業日カレンダー、予約システム、イベント案内、ブログの投稿日表示など、日付と曜日を扱うさまざまな場面に応用できます。
生徒
「PHPで日本語の曜日を表示するときは、英語の曜日を一つずつ翻訳するわけではないんですね。」
先生
「はい。format('w')で曜日番号を取得し、その番号を使って日本語の曜日を保存した配列から値を取り出します。」
生徒
「日曜日がゼロ、月曜日が一という順番なので、配列も日曜日から始める必要があるということですね。」
先生
「そのとおりです。曜日番号と配列の位置が同じになるように並べることで、条件分岐をたくさん書かなくても日本語の曜日へ変換できます。」
生徒
「現在の曜日だけでなく、誕生日や予約日の曜日も同じ方法で調べられますか?」
先生
「調べられます。DateTimeへ日付を指定して、その日付から曜日番号を取得すれば、過去の日付でも未来の日付でも日本語の曜日を表示できます。」
生徒
「曜日が一日ずれて表示されたときは、どこを確認すればよいですか?」
先生
「配列の並び順、指定した年月日、format('w')の記述、タイムゾーンの順番で確認しましょう。現在日時を使う場合は、日本時間のAsia/Tokyoが指定されているかも重要です。」
生徒
「画面が狭いカレンダーでは、曜日を一文字にしても仕組みは同じですか?」
先生
「同じです。配列の中身を日曜日から土曜日までの完全な名前ではなく、日から土までの一文字に変更すれば、短い曜日表記を作れます。」
生徒
「何度も曜日を表示するなら、関数にまとめておくと同じコードを書かなくて済むのですね。」
先生
「はい。日付を関数へ渡すだけで日本語の曜日が返る形にすると、予約画面やイベント一覧など、複数の場所で同じ曜日変換を安全に再利用できます。」