[PHP] 現在日時・任意の日付を取得しフォーマットする方法
Contents
Date関数
構文:
第一引数はフォーマットの形式を指定
第二引数はUnixタイムスタンプを指定、省略可能で省略すると現在日時( time() )が指定される
date (フォーマット (, タイムスタンプ ) );
第一引数はフォーマットの形式を指定
第二引数はUnixタイムスタンプを指定、省略可能で省略すると現在日時( time() )が指定される
フォーマット
フォーマットに使用する文字列は公式から参照
フォーマット一覧
フォーマットサンプル
date("Y-m-d H:i:s"); // 2019-04-08 17:16:18 (MySQLのDATETIME型)
date('Y/m/d H:i:s') // 2019/04/08 17:16:18
date("Ymd"); // 20190408
date("H:i:s"); // 04:11:18
date('Y年m月d日 H時i分s秒'); // 2019年04月08日 10時45分00秒
date("F j, Y, g:i a"); // April 08, 2019, 4:11 pm
date("l M j"); // Wednesday Apr 10
現在日時の取得
echo date("Y-m-d H:i:s"); // 2019-04-08 17:16:18
任意の日時の取得
echo date('Y-m-d H:i:s', strtotime('2019-04-08')); // 2019-04-08 00:00:00
echo date('Y-m-d H:i:s', 1554681600); // 2019-04-08 00:00:00
strtotime()で日時をUnixタイムスタンプを取得し、それをdate()に渡す
DateTimeクラス
PHP5.2以上で使用可能
Unixタイムスタンプは2038年問題があるため、日付操作はDateTimeクラスの使用が推奨されている
構文:new DateTime( (任意の日時) );
第一引数は日時を指定、省略可能で省略すると現在の日時が返される
フォーマットしないままechoすると致命的エラーとなる
フォーマット
$date = new DateTime('2000-01-01');
$date->format('Y-m-d H:i:s');
成功した場合、フォーマット済みの日付、失敗した場合に FALSE を返すフォーマットの形式は、date関数とほぼ同じ
現在日時の取得
$now = new DateTime();
echo $now->format('Y-m-d H:i:s'); // 2019-03-31 20:40:08
任意の日時の取得
$bday = new DateTime('2019-04-08 04:33:01');
echo $bday->format('Y年m月d日 H時i分s秒'); // 2019年04月08日 04時33分01秒
相対日時で取得
今を起点として、相対的な日時を取得できる
詳しくは、
// 現在日時
$now = new DateTime("now");
echo $now->format('Y-m-d H:i:s'); // 2019-04-10 10:03:24 Wednesday
// 今日
$today = new DateTime("today");
echo $today->format('Y-m-d H:i:s l'); // 2019-04-10 00:00:00 Wednesday
// 2日前
$date = new DateTime("2 days ago");
echo $date->format('Y-m-d H:i:s D'); // 2019-04-08 09:56:15 Mon
"now"
は現在日時、"today"
は今日の「00:00:00」となる
strtotime関数
英文形式の日時をUnixタイムスタンプに変換する
Unixタイムスタンプとは、協定世界時(UTC)で1970年1月1日(午前0時0分0秒)からの経過秒数を表す
1970年1月1日以前や2038年1月19日以降の日付を表せない(32ビットのシステムではビット数が足りないため)
このため、この関数の使用は推奨されていない
構文:
引数の、日時は英文形式の日時、タイムスタンプはUnixタイムスタンプを指定、省略すると現在時刻が返される
成功した場合タイムスタンプ、失敗した場合にはFALSEを返す(PHP 5.1.0 以前では失敗した場合-1を返す)
strtotime( string 日時 [, int タイムスタンプ ] )
引数の、日時は英文形式の日時、タイムスタンプはUnixタイムスタンプを指定、省略すると現在時刻が返される
成功した場合タイムスタンプ、失敗した場合にはFALSEを返す(PHP 5.1.0 以前では失敗した場合-1を返す)
現在日時の取得
echo strtotime("now"); // 1554066420
任意の日時の取得
echo strtotime('2038-01-19 03:14:07'); // 2147483647
echo strtotime("05 Feb 2000"); // 949708800
月は、英語の先頭3文字、フルスペルどちらも指定可能
相対日時
使える書式(文字列)はDateTimeクラスと同じ
// 明日
strtotime("tomorrow");
strtotime("+1 day");
strtotime("last Monday"); //前の月曜日
strtotime("next Month"); //再来月
strtotime('+30 second'); // 30秒後
strtotime("+1 week 2 days 4 hours 2 seconds"); // 1週間と2日と4時間2秒後