¿Qué significa 'P' en el formato DateInterval?

82

Considere el siguiente ejemplo citado del manual de php para DateTime

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

'D' es por días, ¿qué significa la 'P' en ese formato?

Shrinath
fuente

Respuestas:

122

Del manual

Especificación de intervalo.

El formato comienza con la letra P, para "punto". Cada período de duración está representado por un valor entero seguido de un indicador de período. Si la duración contiene elementos de tiempo, esa parte de la especificación está precedida por la letra T.

Phil
fuente
24

'P' significa Periodo. ver aquí http://php.net/manual/en/dateinterval.construct.php

Java
fuente
10
Eso es una locura, se usan tantos ejemplos, Ppero esa referencia es muy discreta. Supuse que significaba período y que estaba buscando php.netpara esa palabra, obviamente, nunca llegué a la página constructor .. Pero no es referencia en date_format, DateTime::diff, DateTime::format, DateInterval, y una serie de generales Date/Timefunciones. Quería saber si había otros prefijos que conocer y maldita sea si pudiera encontrarlo hasta que llegué al intercambio de pilas
Madivad
9

Creo que se puede responder con más detalles. En primer lugar, el DateIntervalmétodo constructor toma un parámetro llamado $interval_specque es una cadena.

DateInterval::__construct ( string $interval_spec )

Este parámetro tiene una especificación que se describe a continuación:

El formato comienza con la letra P, por un punto. Cada período de duración está representado por un valor entero seguido de un indicador de período. Si la duración contiene elementos de tiempo, esa parte de la especificación está precedida por la letra T.

Hay algunos designadores de período que se utilizan en el argumento:

  • Y por años
  • M por meses
  • D por días
  • W durante semanas . Estos se convierten en días, por lo que no se pueden combinar con D.
  • H por horas
  • M por minutos
  • S por segundos

Veamos un ejemplo usando designadores de período:

  • Dos días es P2D.
  • Dos segundos es PT2S.
  • Seis años y cinco minutos es P6YT5M.

Hay un orden que debe mantenerse como se describe en el documento:

Los tipos de unidad deben ingresarse desde la unidad de escala más grande a la izquierda hasta la unidad de escala más pequeña a la derecha. Por tanto, años antes de meses, meses antes de días, días antes de minutos, etc. Por tanto, un año y cuatro días deben representarse como P1Y4D, no P4D1Y.

La especificación también se puede representar como una fecha y hora .

  • Un año, dos meses, cuatro días serían P0001-02-04T00: 00: 00

Pero los valores en este formato no pueden exceder el punto de transferencia de un período determinado (por ejemplo, 25 horas no es válido).

unclexo
fuente