サポートする日付と時刻の書式

目次

この節では DateTimeImmutable, DateTime, date_create_immutable(), date_create(), date_parse() および strtotime() が解釈可能な全ての書式について説明します。 これらの書式はセクションごとにグループ分けされています。 たいていの場合、一つの日付・時刻文字列の中でホワイトスペース、 コンマまたはドットで区切られた異なるセクションの書式を併用することができます。 それぞれの書式について、説明と一緒に1個以上の例を示してあります。 シングルクォートで囲まれたフォーマットは大文字小文字を同一視します ('t't とも T とも書けます)。 ダブルクォートで囲まれたフォーマットは大文字小文字を同一視しません ("T"T としか書けません)。

以下の一般的なルールを考慮すべきです。

  1. 日付/時刻のパーサーは、 個別の単位(年月日時分秒)ごとに許される値の範囲を持っています。 年については4桁の数値、 月については 0-12。 日は 0-31、 時と分は 0-59 の範囲を持ちます。
  2. 秒に60を入れても構いません。 なぜなら、うるう秒を含んだ日付の文字列が現れる場合があるからです。 しかし、PHP は "60" を不正な秒として扱う UnixTime を実装しているため、 60 を入れるとオーバーフローします。
  3. strtotime() は、 いずれかの数値が範囲外の場合に false を返します。 DateTimeImmutable::__construct() はその場合に例外をスローします。
  4. 文字列が日付の場合、時刻に関する全ての要素は 0 にリセットされます。
  5. 時刻の一部が指定された文字列に含まれている場合、 重要でない時刻の要素は全て0にリセットされます。
  6. The parser is dumb, and doesn't do any checks to make it faster (and more generic). 日付/時刻のパーサーはお馬鹿なので、 高速にするためのチェックは行いません (そのため、より汎用的です)。
  7. 不正な日付を渡していないかどうかについて、追加のチェックが行われます:

    <?php
    $res 
    date_parse("2015-09-31");
    var_dump($res["warnings"]);
    ?>

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

    array(1) {
      [11] =>
      string(27) "The parsed date was invalid"
    }
    

  8. エッジケースも処理できます。 ただ、処理するためには、 DateTimeImmutable::createFromFormat() を使い、正しいフォーマットを指定する必要があります。

    <?php
    $res 
    DateImmutable::createFromFormat("Y-m-d""2015-09-34");
    var_dump($res);

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

    class DateTime#1 (3) {
      public $date =>
      string(26) "2015-10-04 17:24:43.000000"
      public $timezone_type =>
      int(3)
      public $timezone =>
      string(13) "Europe/London"
    }
    

関連キーワード:  時刻, 日付, サポート, 書式, date, string, フォーマット, DateTimeImmutable, 範囲, public