PHP入門 DateTimeクラス 日付/時刻値のフォーマットで整形する(formatメソッド)

日付/時刻値を整形するには、formatメソッドを使います。

構文:formatメソッド

DateTime::format(string $format): string
$format書式文字列

書式文字列には、記述子を含めることができます。記述子とは、書式文字列の中で意味を持った文字列のことで、たとえば「Y」は実行時に4桁の年で置き換えれます。

書式文字列で利用可能な記述子

記述子概要
a午前/午後am | pm
A午前/午後AM | PM
d01~31
D曜日(省略形)Mon~Sun
F月(長い形式)January~December
h時(12時間単位)01~12
H時(24時間単位)00~23
g時(12時間単位)01~12
G時(24時間単位)00~23
i00~59
j1~31
l曜日(長い形式)Monday~Sunday
L閏年であるか0|1
m01~12
NISO8601形式の曜日1(月曜)~7(日曜)
n1~12
M月(省略形)Jan~Dec
cSO8601形式日付2021-05-15T 15:15:10+0900
rRFC822フォーマットの日付Sat, 15 May 2021 15:16:10 +0900
s00~59
S序数を表す接頭辞st | nd |th
t月の日数28~31
Oグリニッジ標準時との時差+0900
Pグリニッジ標準時との時差+09:00
TタイムゾーンMDT
Uタイムスタンプ1621059370
uマイクロ秒513234
vミリ秒786
W年の通算週39
w曜日0(日曜)~6(土曜)
Y年(4桁)2021
y年(2桁)21
z年間の通算日0~365
Zタイムゾーンのオフセット秒数-43200~50400

主な書式文字列(DateTimeクラスの定数)

定数書式文字列結果
ATOMY-m-d\TH:i:sP2021-06-25T 14:35:59+0900
COOKIEI,d-M-Y H:i:s TFriday,25-Jun-2021 14:35:59 JST
SIO8601Y-m-d\TH:i:sO2021-06-25T 14:35:59+0900
RFC822D, d M y H:i:s OFri, 25 Jun 21 14:35:59 +0900
RFC850I, d-M-y H:I:s TFriday,25-Jun-21 14:35:59 JST
RFC1036D, d M y H:i:s OFri, 25 Jun 21 14:35:59 +0900
RFC1123D, d M y H:i:s OFri, 25 Jun 2021 14:35:59 +0900
RFC7231D, d M y H:i:s \G\M\TFri, 25 Jun 21 14:35:59 GMT
RFC2822D, d M y H:i:s OFri, 25 Jun 2021 14:35:59 +0900
RFC3339Y-m-d\TH:i:sP2021-06-25T 14:35:59+0900
FC3339_EXTENDEDY-m-d\TH:i:s,vP2021-06-25T 14:35:59.000+0900
RSSD, d M y H:i:s OFri, 25 Jun 2021 14:35:59+0900
W3CY-m-d\TH:i:sP2021-06-25T 14:35:59+09:00

<?php
$now = new DateTime();
$now->setTimestamp(time());
print $now->format('Y年m月d日 (D) g:i:s a').'<br>';  //➊
print $now->format('当月の日数:t日').'<br>';         //➋
print $now->format('L').'<br>';                      //➌
print $now->format(DateTime::RSS);                  //➍
実行結果
実行結果

➊は、文字列リテラルと複数の記述しを組み合わせた例。DateTimeオブジェクトは、そのままでは出力できないので、printなどの命令に渡す前にformatメソッドで文字列形式に変換する必要があります。➋➌のように記述子単体で指定してもかまいません。日付/数値値から特定の要素だけを取り出したい場合に利用できます。特殊な記述子として、当月の日数を求める「t」や閏年であるか判定する「L」などもあります。DateTimeクラスでは特定の書式文字列を定数としてあらかじめ公開しています。(❹)これらの定数をformatメソッドの引数として直接指定することもできます。