PHPでの日付表示の方法

phpでは、いろいろと日付を表示する方法があります。改めて調べてみたのでまとめてみました。
基本形としては、
date('表示形式', タイムスタンプ=省略可能)
となります。通常は date('Y-m-d') などとタイムスタンプを省略して現在時刻でのタイムスタンプ、つまりtime()で表示される値をそのまま使う場合が多いかと思います。ここでの表示形式をまずは一覧してみます。

Y4桁の年表記。2021など
y2桁の年表記。21など
oISO-8601での年数 使い方が難しい。
Lうるう年。1:うるう年、0:通常
m2桁数字での月。01,02など
n数字の月。1,2,3…12など
F英語表記でのフルスペルの月
January…December
M英語3文字。Jan…Dec
t月の日数。28,29,30,31
d2桁数字での日付。01,02など
j数字での日付。1,2,…31
z年間での通算日。0,1,2,3..365

一部初めてみる表記もありました。続いて時刻

g12時間表記での時間。1,2,…12
G24時間表記での時間。1,2,…23
h12時間表記での2桁の時間。01,02…12
H24時間表記での2桁の時間。01,02…23
i2桁表記での分。00,01,….59
s2桁表示での秒。00,01,…59

さらに

a小文字で午前午後表記。am, pm
A大文字で午前午後表記。AM, PM
Dアルファベット3文字での曜日表示。Mon…Sun
Iアルファベットでの曜日表示。Monday…Sunday
N数字での曜日表記。1(月)、…7(日)
W数字での曜日表記。0(日)、1(月)…6(土)

とここまではゴリゴリやる場合。さらに以下のような定数があって使える。この場合は、 date(DATE_ATM) といった形式で使います。クオートで囲まないように注意。

DATE_ATOMAtom2021-06-06T12:23:34+09:00
DATE_COOKIEHTTP CookiesSunday, 06-Jun-2021 12:23:34 JST
DATE_ISO8601ISO-86012021-06-06T12:23:34+0900
DATE_RFC822RFC 822Sun, 06 Jun 21 13:26:43 +0000
DATE_RFC850RFC 850Sunday, 06-Jun-21 13:26:43 UTC
DATE_RFC1036RFC 1036Sun, 06 Jun 21 13:26:43 +0000
DATE_RFC1123RFC 1123Sun, 06 Jun 2021 13:26:43 +0000
DATE_RFC2822RFC 2822Sun, 06 Jun 2021 13:26:43 +0000
DATE_RFC3339RFC 33392021-06-06T13:26:43+00:00
DATE_RSSRSSSun, 06 Jun 2021 13:26:43 +0000
DATE_W3CWWW Consortium2021-06-06T13:26:43+00:00
<?php
echo date(DATE_ATOM),"\n";
echo date(DATE_COOKIE),"\n";
echo date(DATE_ISO8601),"\n";
echo date(DATE_RFC822),"\n";
echo date(DATE_RFC850),"\n";
echo date(DATE_RFC1036),"\n";
echo date(DATE_RFC1123),"\n";
echo date(DATE_RFC2822),"\n";
echo date(DATE_RFC3339),"\n";
echo date(DATE_RSS),"\n";
echo date(DATE_W3C),"\n"; 

//実行結果
2021-06-06T13:26:43+00:00
Sunday, 06-Jun-2021 13:26:43 UTC
2021-06-06T13:26:43+0000
Sun, 06 Jun 21 13:26:43 +0000
Sunday, 06-Jun-21 13:26:43 UTC
Sun, 06 Jun 21 13:26:43 +0000
Sun, 06 Jun 2021 13:26:43 +0000
Sun, 06 Jun 2021 13:26:43 +0000
2021-06-06T13:26:43+00:00
Sun, 06 Jun 2021 13:26:43 +0000
2021-06-06T13:26:43+00:00

とここまで記載しておいて何なのですが、今どきのPHPではDateTimeクラスが用意されています。日付表示だけでなく差分などのメソッドも多数用意されているので便利です。多国語対応などを考えると今後は、こちらを使うべきでしょうね。

<?php
$dt = new DateTime();
//フォーマットは上記のこれまで使ってきたものが使えるようです
echo $dt->format(DATE_ATOM) . "\n";

//日付の計算
$interval = DateInterval::createFromDateString('-10 months');
echo $dt->add($interval)->format('Y-m-d') . "\n";

//タイムゾーン指定
$dt= new DateTime('now', new DateTimeZone('Asia/Tokyo'));
echo $dt->format('Y-m-d H:i:s'), "\n";
//別のタイムゾーンに変換すると
echo $dt->setTimeZone(new DateTimeZone('Europe/London'))->format('Y-m-d H:i:s') , "\n";

//diff計算も簡単
$dt1 = new DateTime('1970-08-13');
$dt2 = new DateTime('now');
echo $dt1->diff($dt2)->format('きっと%Y歳') . "\n";

コメント

タイトルとURLをコピーしました