PHP の date 関数 - 日付と時刻をフォーマットする

PHP で日時を表示するとき、最も基本的な関数が date です。この関数は Unix タイムスタンプを受け取り、指定したフォーマット文字列に従って整形された日時文字列を返します。

基本的な使い方

date 関数のシグネチャは次のとおりです。

date(string $format, ?int $timestamp = null): string

第 1 引数にフォーマット文字列、第 2 引数にタイムスタンプを渡します。第 2 引数を省略すると現在時刻が使われるため、「今の日時を表示したい」だけなら第 1 引数だけで十分です。

echo date('Y-m-d');       // 例: 2025-06-15
echo date('Y/m/d H:i:s'); // 例: 2025/06/15 14:30:00

フォーマット文字

date 関数の動作を決めるのがフォーマット文字です。文字列中の特定のアルファベットが日時の各要素に置き換わります。

文字意味
Y4 桁の西暦2025
m2 桁の月(0 埋め)01〜12
d2 桁の日(0 埋め)01〜31
文字意味
H24 時間制の時(0 埋め)00〜23
i分(0 埋め)00〜59
s秒(0 埋め)00〜59

年月日を表す Y・m・d と、時分秒を表す H・i・s はとくに使用頻度が高いので、まずこの 6 つを覚えておくとよいでしょう。

0 埋めなしの文字

月や日を 0 埋めせずに表示したい場面もあります。たとえば「6月5日」のように先頭のゼロが不要なケースです。

0 埋めあり

m は月を 06 のように 2 桁で返す。d は日を 05 のように 2 桁で返す。

0 埋めなし

n は月を 6 のように返す。j は日を 5 のように返す。

echo date('Y年n月j日'); // 例: 2025年6月5日

HTML 上で日本語の日付を自然に表示したいときは、n と j の組み合わせが便利です。

曜日を取得する

曜日に関連するフォーマット文字もいくつか用意されています。

文字意味
l曜日のフルネームMonday
D曜日の省略形Mon
w曜日の数値0(日)〜6(土)

曜日を日本語で表示したい場合、w で数値を取得してから配列で変換するのが一般的な方法です。

$weekdays = ['日', '月', '火', '水', '木', '金', '土'];
$w = (int) date('w');
echo date('Y年n月j日') . '(' . $weekdays[$w] . ')';
// 例: 2025年6月15日(日)

l や D は英語表記を返すため、日本語の曜日が必要なときはこのように自前で変換する必要があります。

午前・午後と 12 時間制

12 時間制で時刻を表示するフォーマット文字も存在します。

文字意味
g12 時間制の時(0 埋めなし)1〜12
A大文字の AM/PMAM, PM
a小文字の am/pmam, pm
echo date('g:i A'); // 例: 2:30 PM

ログ出力やデータベースへの保存には 24 時間制の H を使い、ユーザー向けの表示には g と A を組み合わせるといった使い分けが可能です。

第 2 引数にタイムスタンプを渡す

date 関数の第 2 引数に任意のタイムスタンプを渡すと、そのタイムスタンプに対応する日時文字列を得られます。

$timestamp = mktime(0, 0, 0, 1, 1, 2000);
echo date('Y-m-d H:i:s', $timestamp);
// 2000-01-01 00:00:00

過去や未来の特定の時点をフォーマットしたいときに使います。第 2 引数を省略した場合は内部的に time() の戻り値、つまり現在のタイムスタンプが使われる仕組みです。

エスケープ

フォーマット文字列の中にフォーマット文字として解釈されたくない文字を含めたい場合は、バックスラッシュでエスケープします。

echo date('Y\年m\月d\日');
// 例: 2025年06月15日

「年」「月」「日」などの漢字はフォーマット文字に該当しないのでエスケープ不要ですが、たとえば t(その月の日数)や S(英語の序数接尾辞)のように意図せず置換される文字が混在する場面では、エスケープが必要になります。

フォーマット文字列に含まれるアルファベットが意図しない変換対象になることがあるため、リテラルとして出力したいアルファベットには \(バックスラッシュ) を前置してエスケープします。

たとえば “Date: Y-m-d” と書くと D・a・t・e がすべて変換対象になる。“\D\a\t\e: Y-m-d” とすればリテラルの Date として出力される。