PHPでの日付取得方法! 詳細まとめました

php 日付取得
  • このエントリーをはてなブックマークに追加
  • Pocket

PHPで日付を取得する方法は様々ある。

それぞれ使い方が異なるため、その時々で必要な方法を選択すればいい。

このページではPHPの日付取得方法についてまとめてお伝えする。

PHPでの日付取得方法

まず、PHPで現在の日付を取得するためによく使う方法をさらっと見ていこう。

上の例のように主にtime()、date()とDateTime()この三つを利用する。これからそれぞれの使い方を詳しく説明する。

PHP日付取得、理解のために

UNIX TIMESTAMPとは

time()を紹介する前にはまず、UNIX TIMESTAMPに関して少し説明しよう。

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

次のようなデータが、UNIX TIMESTAMPだ。

1449465487

これは何かというと、「協定世界時(UTC)を基準にした1970年1月1日の0時0分0秒からの経過秒数」を示している。

時間を秒数、つまり数値として表すことで、「何分、何時間、何日経過したか?」などを計算式で求めることができるというわけだ。ちなみに、上記は2015年12月7日 14時18分07秒時点のものだ。

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時間取得

下記のように、time()を利用して現在のUNIX TIMESTAMP時間を取得する。

time()

$_SERVER['REQUEST_TIME']

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

コードの中で登場する可能性はあるので、一応お伝えだけしておく。

$_SERVER['REQUEST_TIME']

date()の使用

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

日時を出力する

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

date ( フォーマット, UNIX TIMESTAMP)

第2引数を省略すると、現在時刻time()が基準になる。そのため、下記だけの表記を見ることも多い。

date ( フォーマット)

指定日時を取得する

現在ではなく、指定した日時のUNIX TIMESTAMPを取得するにはstrtotime()を使う。

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

絶対日時で指定する

strtotime()は、「絶対日時」と「相対日時」で日時を指定できる。まずは絶対日時で取得してみよう。

例えば、2014年1月1日 10時20分30秒のUNIX TIMESTAMPを取得したい場合は、次のように指定して下さい。

相対日時で指定する

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

定数

規格

year

+1 year

month

+1 month

week

+1 week

day

+1 day

hour

時間

+1 hour

minute

+1 minute

second

+1 second

相対指定の使い方は次のように使う。

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

strtotime()を使って柔軟に日付のUNIX TIMESTAMPを取ることができる。

date関数で日付のフォーマット変更

phpで日付文字列の形式(フォーマット)を変換する場合、date関数を使用し変換する。

データベースからdatetime型の値を取得した時に時間を表示せず年月日だけ表示したい場合などがある。

下記の方法で指定の形式に日付・日時を変更できる。

strtotime()でUnixタイムスタンプを取得し、date()で日付のフォーマットを変更する

date()関数のフォーマット

【年】

フォーマット

内容

Y

4桁の年。例:2014

y

2桁の年。例:14

L

閏年。1:閏年 0:閏年ではない

【月】

フォーマット

内容

m

ゼロ詰めの月。01~12

n

ゼロなしの月。1~12

F

フルスペルの月。例:January

M

3文字形式の月。例:Jan

t

月の日数。28~31

【日】

フォーマット

内容

d

ゼロ詰めの日。01~31

j

ゼロなしの日。1~31

z

年間の通算日。0~365

【時】

フォーマット

内容

g

12時間単位の時(ゼロなし)。1~12

G

24時間単位の時(ゼロなし)。0~23

h

12時間単位の時。01~12

H

24時間単位の時。00~23

【分】

フォーマット

内容

i

分。00~59

【秒】

フォーマット

内容

s

秒。00~59

【午前・午後】

フォーマット

内容

a

午前:am 午後:pm

A

午前:AM 午後:PM

【曜日】

フォーマット

内容

D

3文字形式の曜日。例:Mon

l

フルスペルの曜日。例:Monday

N

ISO-8601形式の曜日。1(月)~7(日)

W

曜日。0(日)~6(土)

定数

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

定数

規格

DATE_ATOM

Atom

2015-12-07T14:18:07+09:00

DATE_COOKIE

HTTP Cookies

Monday, 07-Dec-2015 14:18:07 JST

DATE_ISO8601

ISO-8601

2015-12-07T14:18:07+0900

DATE_RFC822

RFC 822

Mon, 07 Dec 15 14:18:07 +0900

DATE_RFC850

RFC 850

Monday, 07-Dec-15 14:18:07 JST

DATE_RFC1036

RFC 1036

Mon, 07 Dec 15 14:18:07 +0900

DATE_RFC1123

RFC 1123

Mon, 07 Dec 2015 14:18:07 +0900

DATE_RFC2822

RFC 2822

Mon, 07 Dec 2015 14:18:07 +0900

DATE_RFC3339

RFC 3339

2015-12-07T14:18:07+09:00

DATE_RSS

RSS

Mon, 07 Dec 2015 14:18:07 +0900

DATE_W3C

WWW Consortium

2015-12-07T14:18:07+09:00。

定数の使い方は下記のように使う。

dateTime()の使用

PHPをお使いの方ならばdate()関数はよく使われていると思う。DateTimeは日付をオブジェクトとして扱うためのクラスで、PHP 5.2.0以降から利用可能だ。例えば次のようなコードがあったとする。

これをDateTimeオブジェクトに置き換えると次のようになる。

次に、特定の日付から3ヵ月引いた日付を出す例だ。

DateTimeを使うと次のようになる。下の例はPHP 5.3.0以降で利用可能なDateIntervalクラスを用いた例だ。

DateTimeなら2038年問題も大丈夫だ。

DateTimeではDateTimeZoneクラスを用いてタイムゾーンを設定することも可能だ。DateTimeZoneはDateTimeのコンストラクタの第2引数にも指定可能だ。

2つのDateTimeのdiffをとることも可能だ。

DateTime::diff()メソッドは2つのDateTimeの差分をDateIntervalオブジェクトとして返す。そのためこれはPHP 5.3.0以降から使える機能になる。

日付のイテレーションを行うDatePeriodクラスもある。次の例は6月1日から6月30日までを1日ずつループする例だ。これもPHP 5.3.0からの機能だ。

少しだけ気を付けなければならないのが new DateTime('last day of 2010-06') とすると6月30日の日付がとれるが、時間が00:00:00のままだとイテレーションの対象にならないようだ。

そのため、+1 secondsとして1秒だけ追加してあげている。

まとめ

PHPの基本的な日付取得に関する方法を紹介したが、いかがだったろうか?

このページを確認してもらえれば、日付に関して必要なところはほとんど押さえられるはずだ。PHPプログラミングにおいて、ウェブアプリ開発、ダイナミックなサイト構築する際に日付に関する処理がよく使うので、基本的なことはしっかりとおさえておくようにどんどん実践してみてください。

  • このエントリーをはてなブックマークに追加
  • Pocket

このページの続きや関連ページは下記から一覧で確認できる。

短期間でエンジニアになる方法

・「まったくの初心者だけどエンジニアになりたい!」

・「プログラマーとして転職をしたい!」

という方はリナックスアカデミーの資料を見てみてください。短期間で未経験からエンジニアになることができるスクールとして15年間選ばれ続けてきた理由やノウハウが載った資料です。

エンジニアの入り口に立つために必要な勉強技術の最新動向本当に使えるIT資格学習に役立つ国からの奨励金などの情報が詰まっています。

無料で2,3日中にお手元にお届けします。


資料を見てみる

SNSでもご購読できます。

コメントを残す

*