Допустимые форматы даты/времени

Содержание

В этом разделе описываются все различные форматы, которые принимает парсер: DateTimeImmutable, DateTime, date_create_immutable(), date_create(), date_parse() и strtotime(). Форматы сгруппированы по разделам. В большинстве случаев форматы из разных разделов, разделённые пробелом, запятой или точкой, могут использоваться в одной и той же строке даты/времени. Для каждого из поддерживаемых форматов приведены один или несколько примеров, а также описание формата. Символы в одинарных кавычках нечувствительны к регистру ('t' эквивалентно как t, так и T), символы в двойных кавычках чувствительны к регистру ("T" означает только T).

Следует принять во внимание общий свод правил.

  1. Парсер допускает для каждой единицы измерения (год, месяц, день, час, минута, секунда) полный диапазон значений. Для года это всего 4 цифры, для месяца - 0-12, дня - 0-31, для часа - 0-24, а для минуты - 0-59.
  2. Для секунд допускается значение 60, так как иногда строки даты с этой прыгающей секундой действительно появляются. Но PHP реализует время Unix, где "60" не является допустимым числом секунд и поэтому происходит переполнение.
  3. Функция strtotime() возвращает false, если какое-либо число находится вне диапазонов, а конструктор DateTimeImmutable::__construct() выбрасывает исключение.
  4. Если строка содержит дату, все элементы времени обнуляются до 0.
  5. Все менее значимые элементы времени сбрасываются до 0, если в данной строке присутствует какая-либо часть времени.
  6. Парсер не делает никаких проверок, чтобы сделать его быстрее (и более универсальным).
  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 
    DateTimeImmutable::createFromFormat("Y-m-d""2015-09-34");
    var_dump($res);

    Результат выполнения данного примера:

    object(DateTimeImmutable)#1 (3) {
      ["date"]=>
      string(26) "2015-10-04 17:24:43.000000"
      ["timezone_type"]=>
      int(3)
      ["timezone"]=>
      string(13) "Europe/London"
    }
    

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top