DateTimeInterface::format

DateTimeImmutable::format

DateTime::format

date_format

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

DateTimeInterface::format -- DateTimeImmutable::format -- DateTime::format -- date_format指定した書式でフォーマットした日付を返す

説明

オブジェクト指向型

public DateTimeInterface::format(string $format): string
public DateTimeImmutable::format(string $format): string
public DateTime::format(string $format): string

手続き型

指定した書式でフォーマットした日付を返します。

パラメータ

object

手続き型のみ: date_create() が返す DateTime オブジェクト

format

出力される日付文字列の書式。以下のオプションを参照ください。 定義済みの定数 も用意されており、たとえば DATE_RSS はフォーマット文字列 'D, d M Y H:i:s' と同じ意味になります。

以下の文字が format パラメータ文字列として認識されます
format 文字 説明 戻り値の例
--- ---
d 日。二桁の数字(先頭にゼロがつく場合も) 01 から 31
D 曜日。3文字のテキスト形式。 Mon から Sun
j 日。先頭にゼロをつけない。 1 から 31
l (小文字の 'L') 曜日。フルスペル形式。 Sunday から Saturday
N ISO 8601 形式の、曜日の数値表現 1(月曜日)から 7(日曜日)
S 英語形式の序数を表すサフィックス。2 文字。 st, nd, rd または thjと一緒に使用する ことができる。
w 曜日。数値。 0 (日曜)から 6 (土曜)
z 年間の通算日。数字。(ゼロから開始) 0 から 365
--- ---
W ISO 8601 月曜日に始まる年単位の週番号 例: 42 (年の第 42 週目)
--- ---
F 月。フルスペルの文字。 January から December
m 月。数字。先頭にゼロをつける。 01 から 12
M 月。3 文字形式。 Jan から Dec
n 月。数字。先頭にゼロをつけない。 1 から 12
t 指定した月の日数。 28 から 31
--- ---
L 閏年であるかどうか。 1なら閏年。0なら閏年ではない。
o ISO 8601 形式の週番号による年。これは Y ほぼ同じだが、ISO 週番号 (W)が前年あるいは翌年に属する場合はそちらの年を使うという点が異なる。 例: 1999 あるいは 2003
X 拡張された年の数値表現。少なくとも4桁からなる数値。紀元前の場合は、- が付きます。西暦の場合は + が付きます。 例: -0055, +0787, +1999, +10191
x 必要に応じて拡張された年の数値表現。 拡張する必要がない場合は、通常の年の数値 (Y と同じ)。 少なくとも4桁からなる数値。紀元前の場合は、- が付きます。10000 (10000を含みます) を超える場合は、+ が付きます。 例: -0055, 0787, 1999, +10191
Y 年。少なくとも4桁からなる数値。紀元前の場合は、- が付きます。 例: -0055, 0787, 1999, 2003, 10191
y 年。2 桁の数字。 例: 99 または 03
--- ---
a 午前または午後(小文字) am または pm
A 午前または午後(大文字) AM または PM
B Swatch インターネット時間 000 から 999
g 時。12時間単位。先頭にゼロを付けない。 1 から 12
G 時。24時間単位。先頭にゼロを付けない。 0 から 23
h 時。数字。12 時間単位。 01 から 12
H 時。数字。24 時間単位。 00 から 23
i 分。先頭にゼロをつける。 00 から 59
s 秒。先頭にゼロをつける。 00 から 59
u マイクロ秒。 date() の場合、これは常に 000000 となることに注意しましょう。というのも、 この関数が受け取るパラメータは int 型だからです。 一方 DateTimeInterface 型のオブジェクトをマイクロ秒つきで作成した場合は、 DateTimeInterface::format() はマイクロ秒にも対応しています。 例: 654321
v ミリ秒。 uと同じ注釈が当てはまります。 例: 654
タイムゾーン --- ---
e タイムゾーン識別子 例: UTC, GMT, Atlantic/Azores
I (大文字の i) サマータイム中か否か 1ならサマータイム中。 0ならそうではない。
O グリニッジ標準時 (GMT) との時差。時間と分の間にコロンは入りません。 例: +0200
P グリニッジ標準時 (GMT) との時差。時間と分をコロンで区切った形式 例: +02:00
p P と同じですが、+00:00 ではなく Z を返します。 (PHP 8.0.0 以降で利用可能) 例: Z または +02:00
T 既知のものについては、タイムゾーンの略称。そうでないものについては、GMT からのオフセット 例: EST, MDT, +05
Z タイムゾーンのオフセット秒数。 UTC の西側のタイムゾーン用のオフセットは常に負です。そして、 UTC の東側のオフセットは常に正です。 -43200 から 50400
全ての日付/時刻 --- ---
c ISO 8601 日付 2004-02-12T15:19:21+00:00
r » RFC 2822/» RFC 5322 形式でフォーマットされた日付 例: Thu, 21 Dec 2000 16:01:07 +0200
U Unix Epoch (1970 年 1 月 1 日 0 時 0 分 0 秒) からの秒数 time() も参照

フォーマット文字列中の認識されない文字は、そのまま表示されます。 Z 形式は、 gmdate() で使用した場合、常に 0 を返します。

注意:

この関数が受け付けるのは int のタイムスタンプだけです。したがって、書式指定文字 u が有用となるのは date_create() で作成したタイムスタンプを用いて date_format() を使用した場合のみです。

戻り値

成功した場合にフォーマット済みの日付文字列を返します。

変更履歴

バージョン 説明
8.2.0 フォーマット文字に Xx が追加されました。
8.0.0 フォーマット文字 p が追加されました。

例1 DateTimeInterface::format() の例

オブジェクト指向型

<?php
$date
= new DateTimeImmutable('2000-01-01');
echo
$date->format('Y-m-d H:i:s');
?>

手続き型

<?php
$date
= date_create('2000-01-01');
echo
date_format($date, 'Y-m-d H:i:s');
?>

上の例の出力は以下となります。

2000-01-01 00:00:00

例2 例をもう少し

<?php
// デフォルトのタイムゾーンを設定します
date_default_timezone_set('UTC');
// 現在時刻で初期化
$date = new DateTimeImmutable();
// Wednesday のような値を出力
echo $date->format('l'), "\n";
// Wednesday 19th of October 2022 08:40:48 AM のような値を出力
echo $date->format('l jS \o\f F Y h:i:s A'), "\n";
/* フォーマット文字で定数を使う */
// Wed, 19 Oct 2022 08:40:48 +0000 のような値を出力
echo $date->format(DateTimeInterface::RFC2822), "\n";
?>

フォーマット文字列の中で既知の文字が展開されることを防ぐために、 バックスラッシュでエスケープすることができます。 バックスラッシュ付きの文字が既に特殊な意味を持つ場合は、 バックスラッシュもエスケープする必要があるでしょう。

例3 フォーマット中に文字をエスケープする

<?php
$date
= new DateTimeImmutable();
// prints something like: Wednesday the 19th
echo $date->format('l \t\h\e jS');
?>

他の言語で日付をフォーマットするには、 DateTimeInterface::format() ではなく IntlDateFormatter::format() を使います。

注意

このメソッドはロケールを考慮しません。出力結果はすべて英語となります。

参考

add a note

User Contributed Notes 1 note

up
0
jurchiks101 at gmail dot com
22 days ago
If you want to get the week of year + year of said week, you need to use `format('o-W'), otherwise you can stumble into a non-obvious gotcha (unless you RTFM and memorised it, that is).
Using `Y` instead of `o` can result in incorrect year values in the case of the first or last week of the year (depending on if January 4th falls into said week or not), such as the first week of 2025 between 2024-12-30 and 2025-01-05 - `(new DateTime('2024-12-30'))->format('o-W')` will return the correct value of `2025-01` (as per ISO-8601 definition of week of year), while `format('Y-W')` will return `2024-01`.
Because of this, I would personally recommend avoiding using week of year anywhere unless absolutely necessary, as it is easy to make this mistake and never realise it.
To Top