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 関数の動作を決めるのがフォーマット文字です。文字列中の特定のアルファベットが日時の各要素に置き換わります。
| 文字 | 意味 | 例 |
|---|---|---|
| Y | 4 桁の西暦 | 2025 |
| m | 2 桁の月(0 埋め) | 01〜12 |
| d | 2 桁の日(0 埋め) | 01〜31 |
| 文字 | 意味 | 例 |
|---|---|---|
| H | 24 時間制の時(0 埋め) | 00〜23 |
| i | 分(0 埋め) | 00〜59 |
| s | 秒(0 埋め) | 00〜59 |
年月日を表す Y・m・d と、時分秒を表す H・i・s はとくに使用頻度が高いので、まずこの 6 つを覚えておくとよいでしょう。
0 埋めなしの文字
月や日を 0 埋めせずに表示したい場面もあります。たとえば「6月5日」のように先頭のゼロが不要なケースです。
m は月を 06 のように 2 桁で返す。d は日を 05 のように 2 桁で返す。
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 時間制で時刻を表示するフォーマット文字も存在します。
| 文字 | 意味 | 例 |
|---|---|---|
| g | 12 時間制の時(0 埋めなし) | 1〜12 |
| A | 大文字の AM/PM | AM, PM |
| a | 小文字の am/pm | am, 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 として出力される。