PHPで時間を取得、表示する方法まとめ

PHPで時間を取得、表示する方法まとめ

PHPで「時間」を取り扱う時に知っておきたい知識を、勉強がてら、まとめてみました。

UNIX TIMESTAMPを取得する

PHPに限らず、プログラミングにおいて時間に関するデータを取り扱う場合、利用するのは、この「UNIX TIMESTAMP」です。「UNIX時間」などとも言われます。

UNIX TIMESTAMPとは?

次のような時間データをよく見かけますよね。これがUNIX TIMESTAMPです。

1469671090

これは何かというと、「協定世界時(UTC)を基準にした1970年1月1日の0時0分0秒からの経過秒数」を示しています。時間を秒数、つまり数値として表すことで、「何分経過したか?」などを計算式で求めることができるというわけです。ちなみに、上記は2016年7月28日 10時58分10秒時点のものです。

UNIX TIMESTAMPの活用方法

例えば、次は2014年1月2日 00時00分00秒時点のUNIX TIMESTAMPです。

1388588400

続いて、次が2014年1月3日 00時00分00秒時点のUNIX TIMESTAMPです。

1388674800

この2つの数値の差を計算すると、次のようになります。

1388588400 - 1388674800 = 86400

このように、2つの時点のUNIX TIMESTAMPを求めて、その差がどれくらいあるかで経過時間を判断し、処理を条件分けすることができるというわけです。

time()

関数のtime()を利用すると、現在(プログラムを起動した時点)のUNIX TIMESTAMPを取得することができます。

PHP

<?php
	// UNIX TIMESTAMPを[$timestamp]という変数に格納する
	$timestamp = time() ;

	// 出力する
	echo $timestamp ;

次のように、出力されます。

1469671090

$_SERVER['REQUEST_TIME']

処理を要する関数ではなく、既にデータになっている$_SERVER['REQUEST_TIME']を利用することで、time()と同じ結果を得られます。こちらの方が処理が速いと言われていますが、そこまで劇的な影響はないでしょう。

PHP

<?php
	// $_SERVER['REQUEST_TIME']を出力する
	echo $_SERVER['REQUEST_TIME'] ;

次のように、出力されます。

1469671090

日時を出力する

UNIX TIMESTAMPの取得方法が分かったら、今度は日時を出力してみましょう。date()の使い方を紹介します。

date()

日時を出力するには、date()という関数を利用します。第1引数にパラメータを指定すると、それらが日時形式に変換されます。「いつの日時を出力するか?」というと、第2引数に指定した、UNIX TIMESTAMPが基準になります。第2引数を省略すると、現在時刻time()が基準になります。

PHP

<?php
	// UNIX TIMESTAMPを取得
	$timestamp = time() ;
 
	// date()で日時を出力
	echo date( "Y/m/d" , $timestamp ) ;
 
	// 改行
	echo "<br><br>" ;
 
	// 第2引数は省略できる = time()を指定したのと同じ
	echo date( "Y/m/d" ) ;

パラメータ

第1引数に指定できるパラメータ(変換文字)を紹介します。例は「2016年7月28日 10時58分10秒」時点の値です。

変換文字説明
Y4桁の西暦。2016
y2桁の西暦。16
oISO-8601形式の年。2016
L閏年の判定。1なら閏年、0なら違う。1
変換文字説明
Fフルスペルの月。July
M3文字形式の月。Jul
m先頭に0を付けた2桁の月。07
n先頭に0を付けない月。7
tその月の日数。即ち、その月の最終日。31
変換文字説明
d先頭に0を付けた2桁の日時。28
j先頭に0を付けない日時。28
zその年の1月1日からの通算日数。1月1日は0。209
S日時のサフィックス。1st、2ndなど。th
変換文字説明
lフルスペルの曜日。Thursday
D3文字形式の曜日。Thu
NISO-8601形式の曜日番号。4
w曜日番号。4
変換文字説明
A午前(AM)か午後(PM)かの判定。大文字。AM
a午前(am)か午後(pm)かの判定。小文字。am
G24時間単位の時。先頭に0を付けない。10
g12時間単位の時。先頭に0を付けない。10
H24時間単位の時。先頭に0を付ける。10
h12時間単位の時。先頭に0を付ける。10
i分。先頭に0を付ける。58
s秒。先頭に0を付ける。10
変換文字説明
WISO-8601形式の週番号。1月1日からの経過週。30
eタイムゾーン識別子。Asia/Tokyo
Tタイムゾーンの略称。JST
Zタイムゾーンのオフセット秒数。UTCとの時差。32400
Oグリニッジ標準時(GMT)との時差。+0900
Pグリニッジ標準時(GMT)との時差。セミコロンあり。+09:00
Iサマータイム中かの判定。1ならサマータイム、0なら違う。0

パラメータの使い方

例えば、下記のように使います。

PHP

<?php
	// 日時を出力する [2014年4月1日 01時01分01秒]
	echo date( "Y年m月d日 H時i分s秒" ) ;

次のように、出力されます。上のパラメータ表と見比べてみて下さいね。

2016年07月28日 10時58分10秒

定数

下記の定数を利用することで、各規格に沿った形式の日時を出力することができます。

定数規格
DATE_ATOMAtom2016-07-28T10:58:10+09:00
DATE_COOKIEHTTP CookiesThursday, 28-Jul-2016 10:58:10 JST
DATE_ISO8601ISO-86012016-07-28T10:58:10+0900
DATE_RFC822RFC 822Thu, 28 Jul 16 10:58:10 +0900
DATE_RFC850RFC 850Thursday, 28-Jul-16 10:58:10 JST
DATE_RFC1036RFC 1036Thu, 28 Jul 16 10:58:10 +0900
DATE_RFC1123RFC 1123Thu, 28 Jul 2016 10:58:10 +0900
DATE_RFC2822RFC 2822Thu, 28 Jul 2016 10:58:10 +0900
DATE_RFC3339RFC 33392016-07-28T10:58:10+09:00
DATE_RSSRSSThu, 28 Jul 2016 10:58:10 +0900
DATE_W3CWWW Consortium2016-07-28T10:58:10+09:00

定数の使い方

例えば、下記のように使います。

PHP

<?php
	// 日時をAtom規格で出力する
	echo date( DATE_ATOM ) ;

次のように、出力されます。フィードを自作したい場合などに重宝しそうです。

2016-07-28T10:58:10+09:00

指定日時のUNIX TIMESTAMPを取得する

現在ではなく、指定した日時のUNIX TIMESTAMPを取得するにはどうすればいいか?この章ではstrtotime()の使い方を紹介します。

strtotime()

strtotime()は、指定した日時のUNIX TIMESTAMPを取得するための関数です。第1引数には、取得したい日時を指定します。第2引数には、主に相対日時で取得したい場合に基準日をUNIX TIMESTAMPで指定します。

絶対日時で指定する

strtotime()は、「絶対日時」と「相対日時」で日時を指定できます。まずは絶対日時で取得してみましょう。例えば、2014年1月1日 10時20分30秒のUNIX TIMESTAMPを取得したい場合は、次のように指定して下さい。

PHP

<?php
	// [2014/1/1 10:20:30]のUNIX TIMESTAMPを取得
	$timestamp = strtotime( '2014/1/1 10:20:30' ) ;
 
	// 出力
	echo $timestamp ;

次のように、出力されます。

1388539230

相対日時で指定する

続いて、相対日時を指定してみましょう。「〜日後」「〜ヶ月後」などの日時を取得したい場合に利用します。数字と、単位の組み合わせで指定します。数字は、未来の場合は「正」で、過去の場合は「負」で指定します。

定数規格
year+1 year
month+1 month
week+1 week
day+1 day
hour時間+1 hour
minute+1 minute
second+1 second

相対指定の使い方

次のように使います。

PHP

<?php
	// 現在から4日後のUNIX TIMESTAMPを取得する
	$timestamp = strtotime( "+4 day" ) ;
 
	// 出力
	echo $timestamp ;

出力結果は次の通りです。2016年7月28日 10時58分10秒から、4日後のUNIX TIMESTAMPになっています。

1470016690

第2引数の指定

第2引数には「基準日時」をUNIX TIMESTAMPで指定することができます。例えば、今日の0時0分から4日後だったら、次のように指定します。

PHP

<?php
	// 今日の0時0分のUNIX TIMESTAMP
	$today = strtotime( date("Y/m/d 00:00:00") ) ;
 
	// 今日の0時0分($today)から4日後のUNIX TIMESTAMPを取得する
	$timestamp = strtotime( "+4 day" , $today ) ;
 
	// 出力
	echo $timestamp ;

出力結果は次の通りです。2016年7月28日(記事の更新時)の0時から4日後のUNIX TIMESTAMPです。

1469977200

色々なTIPS

この章では、日時を出力するためのTIPSを備忘録代わりに掲載していきます。

曜日を出力する

英語ではなく、日本語で曜日を出力するには、date('w')で取得した曜日番号に合わせて出力できるよう、あらかじめ、配列を用意しておきます。

PHP

<?php
	// 曜日の配列
	$weekday = array( '日' , '月' , '火' , '水' , '木' , '金' , '土' ) ;
 
	// 日本語で曜日を出力する
	echo $weekday[ date('w') ] ;

出力結果は次の通りです。2016年7月28日(記事の更新時)の曜日が、日本語で出力されていますね。

月の最終日を求める

ある月の最終日を求めたい場合は、月の合計日数を取得するdate('t')を使います。合計日数は、すなわち、最終日の日数ですよね。

PHP

<?php
	//今月の最終日の日付
	echo date( 't' ) ;

出力結果は次の通りです。2016年7月28日(記事の更新時)の月末の日時が出力されていますね。

31