time/date関数の使い方(日時を取得する)

PHP で用意されている組み込み関数の一つである date 関数および time 関数の使い方です。 date 関数は引数で指定したフォーマットで日付文字列を取得します。また time 関数は現在時刻を Unix エポック(1970年1月1日 00:00:00 GMT)からの通算秒として取得します。

(2022 年 09 月 28 日公開 / 2022 年 09 月 28 日更新)

date関数およびtime関数の書式と基本的な使い方

date 関数は次のように定義されています。

date
string date(string format [, int timestamp])
引数で指定したフォーマットで日付文字列を取得します。2番目の引数にて
取得したい日時を指定しますが、省略された場合は現在の日時に関して取得
します。

引数:
  format  日付のフォーマット
  timestamp  フォーマットの対象となる日時
返り値:
  フォーマットされた日付文字列

フォーマットの対象となるタイムスタンプで指定可能な範囲は、通常 Fri, 13 Dec 1901 20:45:54 GMT から Tue, 19 Jan 2038 03:14:07 GMT までとなっています。省略した場合は「time」関数で得られる現在日時の値が対象となります。

指定可能なフォーマットの種類は下記の通りです。

format 文字説明
d日。2桁の数字(ゼロ詰め)01 から 31
D曜日。3文字のテキスト形式Mon から Sun
j日。(1桁はゼロ無し)1 から 31
l曜日。フルスペル形式Sunday から Saturday
NISO-8601 形式の、曜日の数値表現1(月曜日)から 7(日曜日)
S英語形式の序数を表すサフィックス。2 文字st, nd, rd または th。jと一緒に使用する
w曜日。数値0 (日曜)から 6 (土曜)
z年間の通算日。数字。(ゼロから開始)0 から 365
format 文字説明
WISO-8601 月曜日に始まる年単位の週番号例: 42 (1年の第42週目)
format 文字説明
F月。フルスペルの文字January から December
m月。数字(ゼロ詰め)01 から 12
M月。3文字形式Jan から Dec
n月。数字(1桁はゼロ無し)1 から 12
t指定した月の日数28 から 31
format 文字説明
L閏年であるかどうかを表す論理値1なら閏年。0なら閏年ではない
oISO-8601 形式の年。これは Y ほぼ同じだが、ISO 週番号(W)が前年あるいは翌年に属する場合がある点で異なる例: 1999 あるいは 2003
Y年。4 桁の数字例: 1999または2003
y年。2 桁の数字例: 99 または 03
format 文字説明
a午前または午後(小文字)am または pm
A午前または午後(大文字)AM または PM
BSwatch インターネット時間000 から 999
g時。12時間単位(1桁はゼロ無し)1 から 12
G時。24時間単位(1桁はゼロ無し)0 から 23
h時。数字。12 時間単位(ゼロ詰め)01 から 12
H時。数字。24 時間単位(ゼロ詰め)00 から 23
i分(ゼロ詰め)00 to 59
s秒(ゼロ詰め)00 から 59
format 文字説明
eタイムゾーン識別子例: UTC, GMT, Atlantic/Azores
Iサマータイム中か否か1ならサマータイム中。0ならそうではない
Oグリニッジ標準時(GMT)との時間差Example: +0200
Tこのマシーンのタイムゾーンの設定例: EST, MDT ...
Zタイムゾーンのオフセット秒数。 UTCの西側のタイムゾーン用のオフセットは常に負です。そして、 UTCの東側のオフセットは常に正です-43200 から 43200
format 文字説明
cISO 8601 日付2004-02-12T15:19:21+00:00
rRFC 822 フォーマットされた日付例: Thu, 21 Dec 2000 16:01:07 +0200
UUnix 時(1970年1月1日0時0分0秒)からの秒数--

例えば「2006年05月01日」などのような日付文字列を取得したい場合には「date('Y年m月d日');」のように行います。このようにフォーマット文字列で使われていない文字を記述した場合は、単に文字列として表示されます。フォーマット文字列と同じ文字を文字として表示したい場合には「\」でエスケープして下さい。

date('Y年m月d日');  --> 2006年05月01日

date('d day');  --> 01 01am06
date('d \d\a\y');  --> 01 day

※「d」も「a」も「y」もそれぞれフォーマット識別子としての意味を持つため、「day」という文字列を表示させるにはそれぞれの文字に対して「\」でエスケープを行う必要があります。

※文字をエスケープした結果、ダブルクォーテーションで囲まれた文字列の中で特別な意味を持つ文字になることがあります(例:\n など)。これを避ける場合には「\\n」などのように「\」自身もエスケープする必要があります。

次に二番目の引数であるタイムスタンプについても見ておきます。省略した場合はデフォルトで「time」関数で得られる現在時刻がフォーマットの対象となりますので「time」関数についても見ておきましょう。

time
int time( void )
現在時刻をUnixエポック(1970年1月1日 00:00:00 GMT)からの通算秒 として
返します。

引数:
返り値:
  通算の秒を表す数値

1970年1月1日 00:00:00 を0として、1秒経過するごとに1ずつ増加させて値となります。例えばこの値で取得した値に+60した値は、現在より1分後の時間となります。

サンプルコード

では実際に試してみます。

<html>
<head><title>PHP TEST</title></head>
<body>

<?php

print(date('Y m d').'<br>');
print(date('Y年m月d日').'<br>');
print(date('d day').'<br>');
print(date('d \d\a\y').'<br>');
print(date('c').'<br>');

?>
</body>
</html>

上記ファイルを Web サーバに設置しブラウザ経由で見ると下記のように表示されます。

dateのテスト

-- --

PHP で用意されている組み込み関数の一つである date 関数および time 関数の使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。