こんにちは!フリーエンジニアのせきです。
PHPには日付や時刻を書式化するdate関数があります。
この記事では、
・date関数について知りたい
・date関数の基本的な使い方について知りたい
という基本的な内容から、
・絶対日時を取得する方法を知りたい
・相対日時を取得する方法を知りたい
といった応用的な使い方に関しても解説していきます。
今回はそんなdate関数について、わかりやすく解説します!
date関数とは?
date関数は指定された日時を任意の形式でフォーマットし、日付文字列を返す関数です。
string date ( string $format [, int $timestamp = time() ] )
第一引数にフォーマット文字列を指定します。
第二引数を省略した場合は、現在日時が第一引数で指定した形式でフォーマットされます。
第二引数にUNIXタイムスタンプを指定した場合は、そのUNIXタイムスタンプがフォーマットされます。
UNIXタイムスタンプとは、1970年1月1日からの秒数です。
サポートされているフォーマット文字列については、以下のページに記載しています。
http://php.net/manual/ja/function.date.php
date関数の使い方
まず、現在日付や現在日時のフォーマットをしてみます。
第一引数にフォーマット文字列を指定し、第二引数は省略します。
<?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>';
?>
実行結果
2017/04/21
2017-04-21 01:09:56
2017年04月21日 01時09分56秒
次に、第二引数にUNIXタイムスタンプを指定してフォーマットしてみます。
<?php
echo date('Y-m-d H:i:s', 10);
?>
実行結果
1970-01-01 00:00:10
UNIXタイムスタンプは1970年1月1日からの秒数なので、「10」を指定するとこのような実行結果になります。
指定日時を取得する方法
指定した日時のUNIXタイムスタンプを取得するには、strtotime関数を使います。
int strtotime ( string $time [, int $now = time() ] )
第一引数に取得したい日時文字列を指定します。
第二引数を省略した場合は、現在を基準とした第一引数の日時のUNIXタイムスタンプを返します。
第二引数にUNIXタイムスタンプを指定した場合は、そのUNIXタイムスタンプを基準とした第一引数の日時のUNIXタイムスタンプを返します。
strtotime関数は、「絶対日時」と「相対日時」で日時を指定して取得できます。
絶対日時を取得する
2017年4月1日10時20分30秒のUNIXタイムスタンプを取得したい場合は、次のように記述します。
<?php
echo strtotime('2017-4-1 10:20:30');
?>
実行結果
1491042030
date関数と組み合わせて使うことで、任意の日時をフォーマットして表示することができます。
<?php
$timestamp = strtotime('2017-4-1 10:20:30');
echo date('Y年m月d日 H時i分s秒', $timestamp);
?>
実行結果
2017年04月01日 10時20分30秒
strtotime関数で取得した日時を、date関数でフォーマットして表示できました。
相対日時を取得する
strtotime関数は、「○日後」「○か月後」といった指定の相対日時を取得することもできます。
第一引数を数字と単位の組み合わせで指定します。
<?php
// 現在から10秒後の日時を取得する
echo strtotime('+10 second');
echo '<br>';
// 現在から3日前の日時を取得する
echo strtotime('-3 day');
echo '<br>';
?>
実行結果
1492737006
1492477796
この例では第二引数を省略したので、現在からの相対日時が取得できます。
UNIXタイムスタンプのままではわかりづらいので、date関数を使ってフォーマットします。
<?php
// 現在から10秒後の日時をフォーマット
$date1 = strtotime('+10 second');
echo date('Y-m-d H:i:s', $date1);
echo '<br>';
// 現在から3日前の日時をフォーマット
$date2 = strtotime('-3 day');
echo date('Y-m-d H:i:s', $date2);
echo '<br>';
?>
実行結果(現在を'2017-04-21 01:09:56'とする)
2017-04-21 01:10:06
2017-04-18 01:09:56
第二引数にUNIXタイムスタンプを指定すると、そのタイムスタンプからの相対日時が取得できます。
<?php
// 基準となるUNIXタイムスタンプ
$timestamp = strtotime('2017-4-1 10:20:30');
// '2017-4-1 10:20:30'から10秒後の日時をフォーマット
$date1 = strtotime('+10 second', $timestamp);
echo date('Y-m-d H:i:s', $date1);
echo '<br>';
// '2017-4-1 10:20:30'から3日前の日時をフォーマット
$date2 = strtotime('-3 day', $timestamp);
echo date('Y-m-d H:i:s', $date2);
echo '<br>';
?>
実行結果
2017-04-01 10:20:40
2017-03-29 10:20:30
最初に、相対日時の基準となるUNIXタイムスタンプを、strtotime関数の絶対日時を取得する方法で取得しています。
それを第二引数に渡し、'2017-4-1 10:20:30'からの相対日時が取得できています。
この例もdate関数を使ってフォーマットして表示しています。
date関数についてもっと詳しく知りたい方へ
date関数のさまざまな使い方については、以下の記事にまとめていますので、ぜひ参考にしてくださいね!
現役PHPプログラマが伝授!date関数で日時を自由に扱おう
更新日 : 2019年4月11日
strtotime関数についてもっと知りたい方へ
ここで紹介したstrtotime関数の使い方については、以下の記事でもさまざまな使い方を紹介しています。
strtotime関数について、もっと知りたい方は以下の記事もぜひ参考にしてください!
【PHP入門】strtotimeを使ったUNIXタイムスタンプの取得方法まとめ
更新日 : 2018年5月25日
まとめ
今回はdate関数の使い方やstrtotime関数での指定日時の取得方法について解説しました。
日付を扱う関数はたくさんありますが、日付文字列を返すdate関数は他の関数と組み合わせて使う機会が多いです。
date関数の使い方、指定日時の取得方法を忘れてしまったら、この記事を思い出して下さい!