ローカルの日付/時刻を書式化する

# date

(PHP 4, PHP 5, PHP 7)

date — ローカルの日付/時刻を書式化する

### 説明

date ( string `$format` [, int `$timestamp` = time() ] ) : string

指定された引数 `timestamp` を、与えられた フォーマット文字列によりフォーマットし、日付文字列を返します。 タイムスタンプが与えられない場合は、現在の時刻が使われます。 つまり `timestamp` はオプションであり そのデフォルト値は time() の値です。

### パラメータ

`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 形式の、曜日の数値表現 (PHP 5.1.0 で追加)。 | 1（月曜日）から 7（日曜日）
  S | 英語形式の序数を表すサフィックス。2 文字。 | st, nd, rd または th。 jと一緒に使用する ことができる。
  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）が前年あるいは翌年に属する場合はそちらの年を使うという点が異なる（PHP 5.1.0 で追加）。 | 例: 1999 あるいは 2003
  Y | 年。4 桁の数字。 | 例: 1999または2003
  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 | マイクロ秒 (PHP 5.2.2 で追加)。 date() の場合、これは常に 000000 となることに注意しましょう。というのも、 この関数が受け取るパラメータは integer 型だからです。 一方 DateTime をマイクロ秒つきで作成した場合は、 DateTime::format() はマイクロ秒にも対応しています。 | 例: 654321
  v | ミリ秒 (PHP 7.0.0 で追加) uと同じ注釈が当てはまります。 | 例: 654
  タイムゾーン | --- | ---
  e | タイムゾーン識別子（PHP 5.1.0 で追加） | 例: UTC, GMT, Atlantic/Azores
  I (大文字の i) | サマータイム中か否か | 1ならサマータイム中。 0ならそうではない。
  O | グリニッジ標準時 (GMT) との時差 | 例: +0200
  P | グリニッジ標準時 (GMT) との時差。時間と分をコロンで区切った形式 (PHP 5.1.3 で追加)。 | 例: +02:00
  T | タイムゾーンの略称 | 例: EST, MDT ...
  Z | タイムゾーンのオフセット秒数。 UTC の西側のタイムゾーン用のオフセットは常に負です。そして、 UTC の東側のオフセットは常に正です。 | -43200 から 50400
  全ての日付/時刻 | --- | ---
  c | ISO 8601 日付 (PHP 5 で追加されました) | 2004-02-12T15:19:21+00:00
  r | » RFC 2822 フォーマットされた日付 | 例: Thu, 21 Dec 2000 16:01:07 +0200
  U | Unix Epoch (1970 年 1 月 1 日 0 時 0 分 0 秒) からの秒数 | time() も参照

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

  > 注意:

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

`timestamp`

  オプションのパラメータ `timestamp` は、 integer 型の Unix タイムスタンプです。 `timestamp` が指定されなかった場合のデフォルト値は、 現在の時刻です。言い換えると、デフォルトは time() の返り値となります。

### 返り値

日付を表す文字列を返します。 `timestamp` に数字以外が使用された場合は `FALSE` が返され、`E_WARNING` レベルのエラーが発生します。

### エラー / 例外

すべての日付/時刻関数は、 有効なタイムゾーンが設定されていない場合に `E_NOTICE` を発生させます。また、システム設定のタイムゾーンあるいは環境変数 TZ を使用した場合には `E_STRICT` あるいは `E_WARNING` を発生させます。 date_default_timezone_set() も参照ください。

### 変更履歴

バージョン | 説明
--- | ---
5.1.0 | 有効なタイムスタンプの範囲は、通常 Fri, 13 Dec 1901 20:45:54 GMT から Tue, 19 Jan 2038 03:14:07 GMT までです (これらの日付は、32 ビット符号付き整数の最小および最大値に 対応します)。 しかし、PHP 5.1 より前のバージョンでは、システム環境によっては (例: Windows) この範囲が 1970 年 1 月 1 日から 2038 年 1 月 19 日 までに制限されます。
5.1.0 | タイムゾーンがおかしい場合に `E_STRICT` や `E_NOTICE` が発生するようになりました。
5.1.1 | PHP 5.1.1 以降、`format` パラメータで標準的な 日付/時刻フォーマットを指定する際に有用な 定数がいくつか追加されました。

### 例

例1 date() の例

`<?php
// 使用するデフォルトのタイムゾーンを指定します。PHP 5.1 以降で使用可能です。
date_default_timezone_set('UTC');
// 結果は、たとえば Monday のようになります。
echo date("l");
// 結果は、たとえば Monday 8th of August 2005 03:12:46 PM のようになります。
echo date('l jS \of F Y h:i:s A');
// 結果は July 1, 2000 is on a Saturday となります。
echo "July 1, 2000 is on a " . date("l", mktime(0, 0, 0, 7, 1, 2000));
/* 書式指定パラメータに、定数を使用します。 */
// 結果は、たとえば Wed, 25 Sep 2013 15:28:57 -0700 のようになります。
echo date(DATE_RFC2822);
// 結果は、たとえば 2000-07-01T00:00:00+00:00 のようになります。
echo date(DATE_ATOM, mktime(0, 0, 0, 7, 1, 2000));
?>`

前にバックスラッシュを付けてエスケープすることにより、 フォーマット文字列として認識される文字が展開されることを防止することができます。 バックスラッシュ付きの文字は既に特別なシーケンスであり、 バックスラッシュもエスケープすることが必要となる可能性があります。

例2 date() の文字をエスケープする

`<?php
// Wednesday the 15th のように出力
echo date('l \t\h\e jS');
?>`

date() と mktime() の両方を用いて、未来または過去の日付を知ることができます。

例3 date() と mktime() の例

`<?php
$tomorrow = mktime(0, 0, 0, date("m") , date("d")+1, date("Y"));
$lastmonth = mktime(0, 0, 0, date("m")-1, date("d"), date("Y"));
$nextyear = mktime(0, 0, 0, date("m"), date("d"), date("Y")+1);
?>`

> 注意:

> サマータイムがあるため、日付や月の秒数を単純にタイムスタンプに 可減算するよりもより信頼性があります。

date() フォーマットのいくつかの例を示します。 現在の実装で特別な意味がある文字や今後の PHP のバージョンで意味が 割り付けられるであろう文字については、望ましくない結果を避けるために エスケープする必要があることに注意してください。エスケープを する際には、改行文字 \n のような文字を回避するために シングルクォートを使用してください。

例4 date() のフォーマット指定

`<?php
// 今日は March 10th, 2001, 5:16:18 pm であり、
// またタイムゾーンは Mountain Standard Time (MST) であるものとします
$today = date("F j, Y, g:i a"); // March 10, 2001, 5:16 pm
$today = date("m.d.y"); // 03.10.01
$today = date("j, n, Y"); // 10, 3, 2001
$today = date("Ymd"); // 20010310
$today = date('h-i-s, j-m-y, it is w Day'); // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$today = date('\i\t \i\s \t\h\e jS \d\a\y.'); // it is the 10th day.
$today = date("D M j G:i:s T Y"); // Sat Mar 10 17:16:18 MST 2001
$today = date('H:m:s \m \i\s\ \m\o\n\t\h'); // 17:03:18 m is month
$today = date("H:i:s"); // 17:16:18
$today = date("Y-m-d H:i:s"); // 2001-03-10 17:16:18 (MySQL の DATETIME フォーマット)
?>`

他の言語で日付をフォーマットするためには、date() のかわりに setlocale() および strftime() 関数を使用する必要があります。

### 注意

> 注意:

> 日付の文字列表現からタイムスタンプを生成するには、 strtotime() が使用できるでしょう。 さらに、いくつかのデータベースは（MySQL の » UNIX_TIMESTAMP 関数の ような）日付フォーマットからタイムスタンプへの変換関数を有しています。

ヒント

PHP 5.1 以降、$_SERVER['REQUEST_TIME'] によってリクエスト開始時のタイムスタンプが取得できるようになりました。

### 参考

- gmdate() - GMT/UTC の日付/時刻を書式化する
- idate() - ローカルな時刻/日付を整数として整形する
- getdate() - 日付/時刻情報を取得する
- getlastmod() - 最終更新時刻を取得する
- mktime() - 日付を Unix のタイムスタンプとして取得する
- strftime() - ロケールの設定に基づいてローカルな日付・時間をフォーマットする
- time() - 現在の Unix タイムスタンプを返す
- strtotime() - 英文形式の日付を Unix タイムスタンプに変換する
- 定義済みの定数