date関数を使って曜日を取得する方法
WEBサイトやWEBサービスを制作していると今日の曜日を表示させたり、曜日に応じた表示の切替を求められる状況があります。
このページでは、そのような場面でPHPを使って曜日を取得する方法について説明します。
曜日の取得は「date関数」で実現できます。
しかし、日本語の曜日を表示させるとなると少し工夫が必要になるので注意が必要です。
date関数のおさらい
まずはじめにPHPのdate関数がどのようなものかを簡単におさらいしておきましょう。
PHPはdate関数を用いることで現在の日時を取得することができるようになっています。
年であれば「Y」、月であれば「m」、日であれば「d」といったようにフォーマットを行うことで現在の年月日や時刻を取得できたり、特定の日時を取得することも可能です。
日時と連動させたシステムを構築するプログラミングには欠かすことのできない関数です。
PHP
<?php echo date('Y/m/d H:i:s'); ?>
プレビュー
date関数について詳しくはこちら
PHPで日付を取得する方法
date関数は当日の日付を年月日で取得することが出来る関数です。date関数は「date('フォーマット形式')」という形で記述します。フォーマットには「Y/m/d」や「Y年m月d日」などがあります。...
date関数で曜日を取得するには?
date関数で取得できるのは年月日や時刻だけではありません。
「D」で英語表記の曜日、「w」で曜日番号が取得できる
フォーマットに「D」を使用すると「Sun、Mon...」のように英語表記の曜日を取得することができます。
PHP
<?php echo date('Y/m/d'); echo '(' . date('D') . ')'; ?>
プレビュー
また、「w」を使用すると、日曜日を「0」番目として土曜日の「6」までの番号で取得することができます。
PHP
<?php echo date('Y/m/d'); echo '(' . date('w') . ')'; ?>
プレビュー
日本語の曜日を表示するには?
さて肝心の日本語の曜日の表示ですが、残念ながらdate関数では英語表記の曜日しか取得できません。
しかし、こちら側で日本語表記を準備すれば曜日番号を利用して日本語で表示させる仕組みを作ることが可能です。
曜日を配列にする
日本語表記を準備するとはつまり、日~土までの各曜日の文字列を格納した配列を作るということです。
先程触れたdate関数のフォーマット「w」で今日の曜日番号を取得し、配列内のその番目の文字列を取り出せば日本語の曜日を表示することができます。
PHP
<?php $week = array("日","月","火","水","木","金","土"); $today = $week[date("w")]; echo "今日は" . $today . "曜日です。"; ?>
プレビュー
日曜を先頭にしておく
この時重要なのが日曜日を先頭にして順番に記述するということです。
dateで取得できる曜日番号は日曜から順に「0、1、2、3...」という形式になっているので、こちらと連動するように日曜から順に配列に収めておかなければ取り出す際にずれた曜日を取得してしまいます。
表記の仕方は自由
上記の例では「日、月、火...」という書き方をしていますが、「日曜日、月曜日、火曜日...」でも「SUNDAY、MONDAY、TUESDAY...」という書き方にしてもOKです。
曜日がずれている場合の対処方法
実際の曜日と異なる曜日が表示されたり日付や時間がずれている場合は、PHPのタイムゾーンが正しく設定されていない可能性があります。
サーバー側の設定ファイルである「php.ini」を開いてタイムゾーンを日本(Asia/Tokyo)に変更するか、プログラム内でdete_default_timezone_set("Asia/Tokyo")を使用してタイムゾーンの変更を行って下さい。
PHPのタイムゾーンの設定について詳しくはこちら
PHPのタイムゾーンの設定方法【現在時刻がずれている時の対処法】
タイムゾーンとはその名のとおり、時間によって世界の地域を区分けしたものです。このタイムゾーンの設定によってWEBサイトは世界のどの地域の時刻を使用するかを決定しています。WEBサイトで日本の時刻を扱うためにはタイムゾーンを正しく設定しておく必要があり、反対に日本であっても他の地域のタイムゾーンを設定することも可能です...
曜日取得したい場面
実際には曜日を表示するだけではなく、曜日ごとにサイト上の表示を変化させたいというニーズがほとんどだと思います。
例えば「お店のサイトで曜日に応じて休業日や異なる営業時間を表示させたい」などです。
そのような場合は、上記の方法で取得した当日の曜日を利用して、曜日に応じて実行する処理を分岐させれば実現可能です。
ここでは、例で述べた「曜日に応じて休業日や異なる営業時間を表示させたい」という処理を作成してみます。
PHP
<?php $week = array("日","月","火","水","木","金","土"); $today = $week[date("w")]; echo date("Y年m月d日") . "(" . $today . ")"; if($today == "土" || $today == "日"){ echo esc_html("本日は休業日"); }else{ echo esc_html("本日は10:00-18:00まで営業中"); } ?>
プレビュー
if文を用いてdate関数で取得した今日の曜日が「土」か「日」であれば「本日は休業日」を表示し、それ以外であれば「本日は10:00-18:00まで営業中」が表示されます。
まとめ
曜日を取得することができれば、曜日ごとに表示を変えるといったスケジュールと連動したシステムを持たせたサイトを作ることも可能です。訪問者がその日に求めている情報を正確に提供するためにもdate関数による曜日取得の方法を理解しておいてください。