DateTime::createFromFormat

date_create_from_format

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

DateTime::createFromFormat -- date_create_from_formatAnaliza una cadena con un instante según un formato especificado

Descripción

Estilo orientado a objetos

publicstaticDateTime::createFromFormat(string$format, string$time, DateTimeZone$timezone = ?): DateTime

Estilo por procedimientos

Devuelve un nuevo objeto DateTime que representa la fecha y la hora especificadas por la cadena time, la cual fue formateada en el formato dado por format.

Parámetros

format

El formato en el que debe estar el string proporcionado. Véanse las opciones de formateo más abajo. En la mayoría de los casos se pueden usar las mismas letras que para date().

Se reconocen los siguientes caracteres en el string del parámetro format
Carácter de formatDescripciónEjemplo de valores analizables
Día------
d y jDía del mes, 2 dígitos con o sin ceros iniciales01 a 31 o 1 a 31
D y lUna representación textual de un díaMon hasta Sun o Sunday hasta Saturday
SSufijo ordinal inglés para el día del mes; 2 caracteres. Se ignora mientras se procesa.st, nd, rd o th.
zEl día del año (comenzando por 0)0 hasta 365
Mes------
F y MUna representación textual de un mes, como January o SeptJanuary hasta December o Jan hasta Dec
m y nRepresentación numérica de un mes, con o sin ceros iniciales01 hasta 12 o 1 hasta 12
Año------
YUna representación numérica completa de un año, 4 dígitosEjemplos: 1999 o 2003
y Una representación de dos dígitos de un año (el cual se asume que esté en el rango 1970-2069, inclusive) Ejemplos: 99 o 03 (que serán representados como 1999 y 2003, respectivamente)
Hora------
a y AAnte meridiem y Post meridiemam o pm
g y hFormato de 12 horas de una hora con o sin ceros iniciales1 hasta 12 o 01 hasta 12
G y HFormato de 24 horas de una hora con o sin ceros iniciales0 hasta 23 o 00 hasta 23
iMinutos con ceros iniciales00 hasta 59
sSegundos, con ceros iniciales00 hasta 59
uMicrosegundos (hasta seis dígitos)Ejemplo: 45, 654321
Zona horaria------
e, O, P y TIdentificador de zona horaria, o diferencia con UTC en horas, o diferencia con UTC con dos puntos entre horas y minutos, o abreviatura de la zona horariaEjemplos: UTC, GMT, Atlantic/Azores o +0200 o +02:00 o EST, MDT
Fecha/Hora completas------
USegundos desde la Época Unix (January 1 1970 00:00:00 GMT)Ejemplo: 1292177455
Espacios en blanco y separadores------
(espacio)Un espacio o una tabulaciónEjemplo:
# Uno de los siguientes símbolos de separación: ;, :, /, ., ,, -, ( o )Ejemplo: /
;, :, /, ., ,, -, ( o )El carácter especificado.Ejemplo: -
?Un byte aleatorioEjemplo: ^ (Observe que para los caracteres UTF-8 podría ser necesario más de un ?. En este caso es probable que quiera usar * en su lugar)
*Bytes aleatorios hasta el siguiente separador o dígitoEjemplo: * en Y-*-d con el string 2009-unaPalabra-08 coincidirá con unaPalabra
!Reinicia todos los campos (año, mes, día, hora, minuto, segundo, fracción e información de la zona horaria) a la Época UnixSin !, todos los campos serán establecidos a la fecha y hora actuales.
|Reinicia todos los campos (año, mes, día, hora, minuto, segundo, fracción e información de la zona horaria) a la Época Unix si no han sido aún analizadosY-m-d| establecerá el año, mes y día a la información encontrada en el string a analizar, y establece la hora, minutos y segundos a 0.
+Si este especificador de formato está presente, la información sobrante del string no causará un error, pero sí una advertencia.Use DateTime::getLastErrors() para averiguar si había presente información sobrante.

Los caracteres no reconocidos en el string de formato causarán que falle el análisis y se añadirá un mensaje de error a la esctructura devuelta. Puede consultar los mensajes de error con DateTime::getLastErrors().

Para incluir caracters literales en format, se han de escapar con una barra invertida (\).

Si format no contiene el carácter !, las partes del instante generado que no estén especificadas en format serán establecidas al instante actual del sistema.

Si format contiene el carácter !, las partes del instante generadas no proporcionadas en format, así como los valores más a la izquierda de !, serán establecidos a los valores correspondientes de la época Unix.

La época Unix es 1970-01-01 00:00:00 UTC.

time

Un string que representa la hora.

timezone

Un objeto DateTimeZone que representa la zona horaria deseada.

Si se omite timezone y time no contiene ninguna zona horaria, se usará la zona horaria en uso.

Nota:

El parámetro timezone y la zona horaria actual son ignoradas cuando el parámetro time contiene una marca temporal de UNIX (p.ej. 946684800) o especifica una zona horaria (p.ej. 2010-01-28T15:00:00+02:00).

Valores devueltos

Devuelve una nueva instancia de DateTime o false en caso de error.

Historial de cambios

VersiónDescripción
5.3.9 Se añadió el especficador + para format.

Ejemplos

Ejemplo #1 Ejemplo de DateTime::createFromFormat()

Estilo orientado a objetos

<?php
$fecha
= DateTime::createFromFormat('j-M-Y', '15-Feb-2009');
echo
$fecha->format('Y-m-d');
?>

Estilo por procedimientos

<?php
$fecha
= date_create_from_format('j-M-Y', '15-Feb-2009');
echo
date_format($fecha, 'Y-m-d');
?>

El resultado de los ejemplos sería:

2009-02-15

Ejemplo #2 Complejidades de DateTime::createFromFormat()

<?php
echo 'Instante actual: ' . date('Y-m-d H:i:s') . "\n";

$formato = 'Y-m-d';
$fecha = DateTime::createFromFormat($formato, '2009-02-15');
echo
"Formato: $formato; " . $fecha->format('Y-m-d H:i:s') . "\n";

$formato = 'Y-m-d H:i:s';
$fecha = DateTime::createFromFormat($formato, '2009-02-15 15:16:17');
echo
"Formato: $formato; " . $fecha->format('Y-m-d H:i:s') . "\n";

$formato = 'Y-m-!d H:i:s';
$fecha = DateTime::createFromFormat($formato, '2009-02-15 15:16:17');
echo
"Formato: $formato; " . $fecha->format('Y-m-d H:i:s') . "\n";

$formato = '!d';
$fecha = DateTime::createFromFormat($formato, '15');
echo
"Formato: $formato; " . $fecha->format('Y-m-d H:i:s') . "\n";
?>

El resultado del ejemplo sería algo similar a:

Instante actual: 2010-04-23 10:29:35 Formato: Y-m-d; 2009-02-15 10:29:35 Formato: Y-m-d H:i:s; 2009-02-15 15:16:17 Formato: Y-m-!d H:i:s; 1970-01-15 15:16:17 Formato: !d; 1970-01-15 00:00:00

Ejemplo #3 Cadena de formato con caracteres literales

<?php
echo DateTime::createFromFormat('H\h i\m s\s','23h 15m 03s')->format('H:i:s');
?>

El resultado del ejemplo sería algo similar a:

23:15:03

Ver también

To Top