¿Qué significa ‘P’ en el formato DateInterval?

3 minutos de lectura

avatar de usuario
Santuario

Considere el siguiente ejemplo citado de manual de php para fecha y hora

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

‘D’ es para días, ¿qué significa la ‘P’ en ese formato?

avatar de usuario
phil

De el manual

Especificación de intervalo.

El formato comienza con la letra P, de “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.

‘P’ significa Período. mira aquí http://php.net/manual/en/dateinterval.construct.php

  • Eso es una locura, tantos ejemplos usan P pero esa referencia es tan subestimada. Supuse que significaba punto y estaba buscando php.net para esa palabra, obviamente nunca llegué a la página del constructor… Pero no se hace referencia en date_format, DateTime::diff, DateTime::format, DateIntervaly una multitud de general Date/Time funciones Quería saber si había otros prefijos que conocer y que me aspen si pudiera encontrarlos hasta que llegué al intercambio de pilas.

    – Madivad

    23 de septiembre de 2017 a las 11:37

Creo que se puede responder con más detalles. Ante todo, DateInterval El método constructor toma un parámetro llamado $interval_spec que es cuerda.

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, de 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
  • METRO por meses
  • D por días
  • W por semanas. Estos se convierten en días, por lo que no se pueden combinar con D.
  • H por horas
  • METRO 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 unidades 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. Entonces, años antes de meses, meses antes de días, días antes de minutos, etc. Por lo tanto, un año y cuatro días deben representarse como P1Y4D, no como P4D1Y.

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

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

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

¿Ha sido útil esta solución?