Что означает "P" в формате DateInterval?


83

Рассмотрим следующий пример, приведенный в руководстве по PHP для DateTime.

<?php
  $date = new DateTime('2000-01-20');
  $date->sub(new DateInterval('P10D'));
  echo $date->format('Y-m-d') . "\n";
?>

«D» означает дни, что означает «P» в этом форматировании?

Ответы:


123

Из руководства

Указание интервала.

Формат начинается с буквы P, что означает «точка». Каждый период продолжительности представлен целым числом, за которым следует указатель периода. Если продолжительность содержит элементы времени, этой части спецификации предшествует буква T.


24

«P» обозначает период. см. здесь http://php.net/manual/en/dateinterval.construct.php


11
Это безумие, используется так много примеров, Pно эта ссылка настолько занижена. Я предположил , что это означает период , и я искал php.netдля этого слова, я , очевидно , никогда не попал на страницы конструктора .. Но это не ссылается на date_format, DateTime::diff, DateTime::format, DateInterval, и множество общих Date/Timeфункций. Я хотел знать, есть ли еще какие-нибудь префиксы, о которых нужно знать, и будь проклят, если я смогу их найти, пока не
Мадивад

9

Думаю, на это можно ответить поподробнее. Прежде всего, DateIntervalметод конструктора принимает один параметр с именем $interval_specstring.

DateInterval::__construct ( string $interval_spec )

Этот параметр имеет спецификацию, описанную ниже:

Формат начинается с буквы P, обозначающей точку. Каждый период продолжительности представлен целым числом, за которым следует указатель периода. Если продолжительность содержит элементы времени, этой части спецификации предшествует буква T.

В аргументе используются некоторые указатели периода:

  • Y для лет
  • M в течение месяцев
  • D в течение нескольких дней
  • W в течение нескольких недель . Они конвертируются в дни, поэтому не могут быть объединены с D.
  • H для часов
  • M в течение минут
  • S на секунды

Давайте посмотрим на пример использования указателей периода:

  • Два дня - это P2D.
  • Две секунды - это PT2S.
  • Шесть лет и пять минут - это P6YT5M.

Существует порядок, который необходимо поддерживать, как описано в документе:

Типы единиц измерения должны быть введены от самой большой единицы шкалы слева до самой маленькой единицы шкалы справа. Итак, годы перед месяцами, месяцы перед днями, дни перед минутами и т. Д. Таким образом, один год и четыре дня должны быть представлены как P1Y4D, а не P4D1Y.

Спецификация также может быть представлена ​​в виде даты и времени .

  • Один год, два месяца, четыре дня будут P0001-02-04T00: 00: 00

Но значения в этом формате не могут превышать точку пролонгации данного периода (например, 25 часов недопустимо).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.