[PHP] 現在日時・任意の日付を取得しフォーマットする方法

PHP

日付や時刻を取得する方法は複数あるのが、自分が既存ソース中でよく見るか、よく使うものをメモ

Date関数

構文: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ビットのシステムではビット数が足りないため)
このため、この関数の使用は推奨されていない

構文: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秒後

Posted by Agopeanuts