PHPでの日付表示の方法

2 Mins read

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

<td>
  4桁の年表記。2021など
</td>
<td>
  2桁の年表記。21など
</td>
<td>
  ISO-8601での年数 使い方が難しい。
</td>
<td>
  うるう年。1:うるう年、0:通常
</td>
<td>
  2桁数字での月。01,02など
</td>
<td>
  数字の月。1,2,3&#8230;12など
</td>
<td>
  英語表記でのフルスペルの月<br />January&#8230;December
</td>
<td>
  英語3文字。Jan&#8230;Dec
</td>
<td>
  月の日数。28,29,30,31
</td>
<td>
  2桁数字での日付。01,02など
</td>
<td>
  数字での日付。1,2,&#8230;31
</td>
<td>
  年間での通算日。0,1,2,3..365
</td>
Y
y
o
L
m
n
F
M
t
d
j
z

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

<td>
  12時間表記での時間。1,2,&#8230;12
</td>
<td>
  24時間表記での時間。1,2,&#8230;23
</td>
<td>
  12時間表記での2桁の時間。01,02&#8230;12
</td>
<td>
  24時間表記での2桁の時間。01,02&#8230;23
</td>
<td>
  2桁表記での分。00,01,&#8230;.59
</td>
<td>
  2桁表示での秒。00,01,&#8230;59
</td>
g
G
h
H
i
s

さらに

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

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

<td>
  Atom
</td>

<td>
  2021-06-06T12:23:34+09:00
</td>
<td>
  HTTP Cookies
</td>

<td>
  Sunday, 06-Jun-2021 12:23:34 JST
</td>
<td>
  ISO-8601
</td>

<td>
  2021-06-06T12:23:34+0900
</td>
<td>
  RFC 822
</td>

<td>
  Sun, 06 Jun 21 13:26:43 +0000
</td>
<td>
  RFC 850
</td>

<td>
  Sunday, 06-Jun-21 13:26:43 UTC
</td>
<td>
  RFC 1036
</td>

<td>
  Sun, 06 Jun 21 13:26:43 +0000
</td>
<td>
  RFC 1123
</td>

<td>
  Sun, 06 Jun 2021 13:26:43 +0000
</td>
<td>
  RFC 2822
</td>

<td>
  Sun, 06 Jun 2021 13:26:43 +0000
</td>
<td>
  RFC 3339
</td>

<td>
  2021-06-06T13:26:43+00:00
</td>
<td>
  RSS
</td>

<td>
  Sun, 06 Jun 2021 13:26:43 +0000
</td>
<td>
  WWW Consortium
</td>

<td>
  2021-06-06T13:26:43+00:00
</td>
DATE_ATOM
DATE_COOKIE
DATE_ISO8601
DATE_RFC822
DATE_RFC850
DATE_RFC1036
DATE_RFC1123
DATE_RFC2822
DATE_RFC3339
DATE_RSS
DATE_W3C
<?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";