様々なWebサイトを見ていると
2018/08/01
2018-08-01
2018年08月01日
といった様々な日付の表示方法がりますがみなさんこれらのフォーマットで表示する方法を知っていますか?
PHPでは日付を取得したり、取得した日付の書式を設定するdate関数があります。
この記事では、
・date関数とは
・date関数の基本的な使い方
・strtotime関数の基本的な使い方
という基本的な内容から、
・タイムゾーンの指定方法
・日付を比較する方法
・曜日を取得する方法
などの応用的な使い方に関しても解説していきます。
今回はそんなdate関数のさまざまな使い方について、わかりやすく解説します!
date関数を使用すれば、さまざな日付操作や日付の比較を行うことができます。
この機会にぜひマスターしておきましょう!
date関数とは
date関数は、引数に指定されたフォーマットを元に、日付文字列を返す関数です。
書式:
string date ( string $フォーマット [, int $タイムスタンプ = time() ] )
引数:
・第一引数のフォーマットには、出力される日付文字列の書式を指定します。
・第二引数のタイムスタンプには、int型のUnixタイムスタンプを指定します。
(タイムスタンプを指定しなかった場合は、現在の時刻がデフォルトで設定されます。)
Unixタイムスタンプとは:
協定世界時(UTC)で1970年1月1日(午前0時0分0秒)の時刻からの経過秒数を表すものです。
日時を経過秒数で表すことで、日時同士を比較するときなどによく使われます。
例えば、後述するstrtotime関数を使用すれば、指定した日時からの経過秒数を「1503308146」のような秒数に変換した値で取得できます。
返り値:
返り値は日付を表す文字列を返します。
タイムスタンプに数字以外が渡された場合はFALSEが返され、エラーとなります。
指定できるフォーマット文字(主に生年月日時分秒):
フォーマット | 説明 | 例 |
Y | 年(西暦の4桁) | 2017 |
y | 年(西暦の2桁) | 17 |
M | 月(2桁の月) | 08 |
n | 月(1桁で先頭に0を付けいない) | 8 |
d | 日(2桁の日付) | 21 |
H | 時間(2桁の24時間単位) | 16 |
h | 時間(2桁の12時間単位) | 08 |
i | 分(2桁の分) | 20 |
s | 秒(2桁の秒) | 30 |
t | 指定した月の日数(28~31) | 31 |
w | 曜日(0:日 ~ 6:土) | 2(火) |
date関数で日付を取得する
ここでは、実際にdate関数の基本的な使い方を紹介します。
以下のプログラムではdate関数にフォーマット文字を指定して日付を取得しています。
// 'Y/m/d' $date1 = date('Y/m/d'); // 'Y-m-d H:i:s' $date2 = date('Y-m-d H:i:s'); // 'Y年m月d日 H時i分s秒' $date3 = date('Y年m月d日 H時i分s秒'); // 'Y/m/d'曜日 $w = date('w'); $week = ['日', '月', '火', '水', '木', '金', '土']; $date4 = date('Y/m/d').$week[$w]; // 時刻を出力 echo $date1.'<br>'; echo $date2.'<br>'; echo $date3.'<br>'; echo $date4;
実行結果:
2017/08/21 2017-08-21 09:22:37 2017年08月21日 09時22分37秒 2017/08/21月
サンプルプログラムのように、PHPがサポートしているYmdなどの書式を指定すれば、簡単にフォーマットされた日付文字列を取得することができます。
date関数の基本的な使いかたについては、以下の記事でも詳しく解説していますので、ぜひ参考にしてくださいね!
また、日付をフォーマットする方法については以下の記事でも詳しく解説しています!
strtotime関数で日付からタイムスタンプを取得する
指定した英文形式の日付をUnixタイムスタンプに変換するには、strtotime関数を使用します。
書式:
int strtotime ( string $日付/日時文字列 [, int $now = time() ] )
引数:
・第一引数にはUnixタイムスタンプを取得するための日時を文字列で指定します。
・第二引数には返される値を計算するために使用するタイムスタンプを指定できます。
返り値:
・int型で時刻を変換したUnixタイムスタンプを返します。
以下にstrtotime関数の簡単なサンプルを紹介します。
$time1 = strtotime('now'); //現在のタイムスタンプ $time2 = date("Y-m-d H:i:s", strtotime('-10 day')); //10日前の日付 $time3 = date("Y-m-d H:i:s", strtotime('+1 week')); //一週間後の日付 $time4 = date("Y-m-d H:i:s", strtotime("next Thursday")); //次の木曜日 echo $time1.'<br>'; echo $time2.'<br>'; echo $time3.'<br>'; echo $time4;
実行結果:
1503308146 2017-08-11 09:35:46 2017-08-28 09:35:46 2017-08-24 00:00:00
strtotime関数はサンプルプログラムのように-10 dayで10日前を指定したり、next Thursdayで次の木曜日を指定するなんてことも可能です。
strtotime関数の基本的な使いかたについては、以下の記事でも詳しく解説していますので、ぜひ参考にしてくださいね!
タイムゾーンの指定
タイムゾーンとは、同じ標準時刻を使用する地域や区分のことを指します。
タイムゾーンは地域ごとに異なります。
インターネットに接続されているコンピューターがぞれぞれ、異なるタイムゾーンを指定していると、システムで時刻を管理している場合は、システムや通信に大きな影響を及ぼしてしまいます。
そのため、システムで管理している時刻に関しては、タイムゾーンを合わせる必要があります。
タイムゾーンはPHPの設定ファイルであるphp.iniで指定できるほか、date_default_timezone_set関数で指定することもできます。
date_default_timezone_setでタイムゾーンを指定
// 日本 date_default_timezone_set('Asia/Tokyo'); echo date("Y/m/d G:i:s").'<br>'; // アメリカ date_default_timezone_set('America/Adak'); echo date("Y/m/d G:i:s");
タイムゾーンの設定方法については、以下の記事でも詳しく解説しています!
日付同士を比較する
プログラムにおいて、特定の日付になったら処理を行ったり、日付順にデータを並べ替えたりするときには、日付を比較する必要があります。
日付の比較はstrtotime関数を使用して、Unixタイムスタンプに変換して比較を行う方法や、DateTime関数を使用する方法があります。
以下に日付を比較する簡単なサンプルを記述します。
$date1 = new DateTime('2017-08-20'); $date2 = new DateTime('2017-08-15'); if ($date1 == $date2){ echo "同じ日付です"; } else if ($date1 > $date2){ echo "date1が未来です"; } else { echo "date2が未来です"; }
実行結果:
date1が未来です
そんな日付を比較する処理の詳細については、以下の記事でも詳しく解説しています!
曜日を取得する
曜日を取得するには、date関数の引数に’w’を指定します。
date(‘w’);
’w’を指定すると、曜日は以下の対応した曜日の番号が返されます。
日:0 月:1 火:2 水:3 木:4 金:5 土:6
以下に曜日を取得する簡単なサンプルを記述します。
//配列を使用し、要素順に(日:0〜土:6)を設定する $week = [ '日', //0 '月', //1 '火', //2 '水', //3 '木', //4 '金', //5 '土', //6 ]; $date = date('w'); //曜日を出力 echo $week[$date] . '曜日';
実行結果:
月曜日
date関数で曜日を取得する方法や、数値で取得した曜日を月〜日のように日本語で取得する方法などについての詳細は、以下の記事で詳しく解説しています!
まとめ
ここでは、
・date関数で指定したフォーマットから日付を取得する方法
・strtotime関数を使用して指定した日付からタイムスタンプを取得する方法
・タイムゾーンを指定する方法
・日付同士を比較する方法
・日付から曜日を取得する方法
などについて解説しました。
PHPでは日付を処理するさまざまな機能が用意されていますので、ぜひ覚えておきましょう。
もし、date関数の使い方を忘れてしまったら、この記事を思い出してくださいね。