【PHP】date関数の使い方を解説!基本から応用まで!
PHPには日付や時刻を見やすく加工するdateという関数があります。
2018/08/01
2018-08-01
2018年08月01日
といった様にdateは日付の表示形式を自由に変えたりできます。
date関数を使って日付や曜日の取得、日付の比較をする方法をサンプルコードを複数使って初心者にも分かり易く解説します。
目次
date関数の構文
date関数は以下のようになります。
1 |
String date ( string $フォーマット [, int $タイムスタンプ = time() ] ) |
パラメータ
date関数は引数を1つ、もしくは2つ持つことができます。
$フォーマット(string):「現在の時刻」を「指定したフォーマット」で出力する
$タイムスタンプ(int):指定したフォーマット」で出力(任意)
戻り値
戻り値はStringを返します。
UNIXタイムスタンプとは
UNIXタイムスタンプとは、コンピューターのシステム時刻の一種であり、世界各国標準時の基礎となる、協定世界時(UTC)から計したものとなります。
スタートは1970年1月1日(午前0時0分0秒)で、そこからの経過時間を指します。
例えば、「6月24日18時21分」でのUNIXタイムスタンプは「1592990471」と表示されます。
日本人にとっては分かりにくい日付だと思います。
UNIXタイムスタンプの使い方
例えば、次は2020年6月24日 18時45分時点のUNIXタイムスタンプは以下のようになります。
1 |
1592991903 |
続いて先ほど取得した、2020年6月24日 18時21時点のUNIXタイムスタンプは以下のようになります。
1 |
1592990471 |
この2つの数値の差を計算すると
1 |
1592991903 - 1592990471 = 1432 |
1432秒なので大体、24分くらいですね。
このように、2つの時点のUNIXタイムスタンプを求めることで、その差がどれくらいあるかで経過時間をが分かります。
date関数の使い方
date関数は第一引数である「$フォーマット」に文字列を指定することで、日付を表示することができます。
例
1 2 3 4 5 6 7 8 9 10 11 |
<?php echo date('Y/m/d'); echo <br>; echo date('Y-m-d H:i:s'); echo <br>; echo date('Y年m月d日 H時i分s秒'); echo <br>; ?> |
出力結果
2020/06/24
2020-06-24 10:44:42
2020年06月24日 10時44分42秒
date関数を使って絶対日時を取得する
絶対日時を取得するにはstrtotime関数を使います。
strtotime関数は以下のようになります。
1 |
int strtotime ( string $フォーマット [, int $タイムスタンプ = time() ] ) |
$フォーマット: 取得したい日時文字列を指定します。
$タイムスタンプ : 現在を基準とした第一引数の日時のUNIXタイムスタンプを返します。(任意)
$タイムスタンプにUNIXタイムスタンプを指定した場合は、そのUNIXタイムスタンプを基準とした第一引数の日時のUNIXタイムスタンプを返します。
それではdate関数とstrtotime関数を使って絶対日時を取得してみましょう。
2020年06月24日 13時20分50秒のUNIXタイムスタンプを取得してみます。
例
1 2 3 4 |
<?php $stamp = strtotime('2020-6-24 13:20:50'); echo date('Y年m月d日 H時i分s秒', $stamp); ?> |
出力結果
2020年06月24日 13時20分50秒
date関数を使って相対日時を取得する
続いて相対日時を取得してみましょう。
相対日時もdate関数とstrtotime関数を使って取得します。
また、「1日後」や「3ヶ月後」などの日時を取得したい場合はstrtotime関数のtimeに以下の定数を指定します。
定数 | 時間 | 例 |
---|---|---|
year | 年 | +1 year |
month | 月 | +2 month |
week | 週 | -1 week |
day | 日 | -2 day |
hour | 分 | -3 hour |
minute | 分 | -5 minute |
second | 秒 | -10 second |
2020年06月24日 10時00分46秒の相対日時を取得してみます。
例
1 2 3 4 5 6 7 8 |
<?php $datePlusM = strtotime('+10 minute'); echo date('Y-m-d H:i:s', $datePlusM); echo "\n"; $datePlusD= strtotime('+6 day'); echo date('Y-m-d H:i:s', $datePlusD); echo "\n"; ?> |
出力結果
2020-06-24 10:10:46
2020-06-30 10:00:46
date関数でフォーマット変更する方法
date関数のフォーマットは$フォーマットに以下の文字を組み合わせ、文字列を指定することで
フォーマットを変更することができます。
定数 | 時間 |
---|---|
Y | 年(4桁表記) |
y | 年(2桁表記) |
m | 月(2桁表記) |
n | 月(先頭にゼロつけない) |
d | 日(2桁表記) |
H | 時間(24時間単位) |
h | 時間(12時間単位) |
i | 分 |
s | 秒 |
t | 指定した月の日数 |
w | 曜日番号(0[日曜]から6[土曜]の値) |
. | 文字列連結 |
\n | 改行 |
日時を出力する方法
日時を出力には下記の定数を利用することで、日時を出力することができます。
定数 | 時間 | 例 |
---|---|---|
DATE_ATOM | Atom | 2020-07-28T10:58:10+09:00 |
DATE_COOKIE | HTTP Cookies | Thursday, 28-Jul-2020 10:58:10 JST |
DATE_ISO8601 | ISO-8601 | 2020-07-28T10:58:10+0900 |
DATE_RFC822 | RFC 822 | Thu, 28 Jul 20 10:58:10 +0900 |
DATE_RFC850 | RFC 850 | Thursday, 28-Jul-20 10:58:10 JST |
DATE_RFC1036 | RFC 1036 | Thu, 28 Jul 20 10:58:10 +0900/td> |
DATE_RFC1123 | RFC 1123 | Thu, 28 Jul 2020 10:58:10 +0900 |
DATE_RFC2822 | RFC 2822 | Thu, 28 Jul 2020 10:58:10 +0900 |
DATE_RFC3339 | RFC 3339 | 2020-07-28T10:58:10+09:00 |
DATE_RSS | RSS | Thu, 28 Jul 2020 10:58:10 +0900 |
DATE_W3C | WWW Consortium | 2020-07-28T10:58:10+09:00 |
定数を利用して日時を出力してみましょう。
例
1 2 3 |
<?php echo date(DATE_RFC3339); ?> |
出力結果
2020-06-24T10:41:24+00:00
タイムゾーンを指定する方法
タイムゾーンを指定するにはdate_default_timezone_set()を使用します。
1 |
date_default_timezone_set($タイムゾーン); |
現在時間$タイムゾーン(string): 現在日時を取得したい地域を選んで、タイムゾーンを指定する
date_default_timezone_set()を使ってタイムゾーンを指定してみましょう。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php date_default_timezone_set('Asia/Tokyo'); echo '<p>', date('Y年m月d日 H時i分s秒'),' Asia/Tokyo', '</p>'; date_default_timezone_set('Asia/Manila'); echo '<p>', date('Y年m月d日 H時i分s秒'),' Asia/Manila', '</p>'; date_default_timezone_set('Asia/Dubai'); echo '<p>', date('Y年m月d日 H時i分s秒'),' Asia/Dubai', '</p>'; date_default_timezone_set('Asia/Macau'); echo '<p>', date('Y年m月d日 H時i分s秒'),' Asia/Macau', '</p>'; ?> |
出力結果
<p>2020年06月24日 19時34分00秒 Asia/Tokyo</p>
<p>2020年06月24日 18時34分00秒 Asia/Manila</p>
<p>2020年06月24日 14時34分00秒 Asia/Dubai</p>
<p>2020年06月24日 18時34分00秒 Asia/Macau</p>
タイムゾーンはたくさんありますので、詳しく知りたい方は調べてみてください。
日付の比較をする方法
例
1 2 3 4 5 6 7 8 9 |
$today = date("Y/m/d"); $oneDay = "2020/06/10"; if(strtotime($today) == strtotime($oneDay)){ echo "日付は今日です"; }else if(strtotime($today) > strtotime($oneDay)){ echo "日付は過去です"; }else{ echo "日付は未来です"; } |
出力結果
日付は過去です
曜日を取得する方法
曜日を取得するにはdate関数の$フォーマットにwを引数として渡すと、
曜日を取得できます。
例
1 2 3 |
<?php $date = date('w'); echo $date; ?> |
出力結果
3
現時点の曜日は水曜日なので水曜日 = 3が返されます。
ST
株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。