PHP 8.0.26 Released!

DateTime::createFromFormat

date_create_from_format

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

DateTime::createFromFormat -- date_create_from_formatRetorna um novo objeto DateTime formatado de acordo com um formato informado

Descrição

Estilo orientado à objeto

public static DateTime::createFromFormat(string $format, string $time, DateTimeZone $timezone = date_default_timezone_get()): DateTime

Estilo procedural

date_create_from_format(string $format, string $time, DateTimeZone $timezone = date_default_timezone_get()): DateTime

Retorna um novo objeto DateTime formatado de acordo com um formato informado.

Parâmetros

format

O formato passado como string. Veja opções de formatação abaixo. Na maioria dos casos, as mesmas letras utilizadas na função date() podem ser utilizadas.

Os seguintes caracteres são reconhecidos no parâmetro format
Caractere de format Descrição Exemplo de valores interpretados
Dia --- ---
d e j Dia do mês, com 2 dígitos e zero à esquerda 01 a 31 ou 1 a 31
D e l Uma representação textual de um dia Mon até Sun ou Sunday até Saturday
S Sufixo ordinal inglês para o dia do mês, 2 caracteres. É ignorado no processamento. st, nd, rd ou th.
z O dia do ano (iniciando em 0) 0 até 365
Mês --- ---
F e M Um representação completa de um mês, como January ou Sept January até December ou Jan até Dec
m e n Representação numérica de um mês, com ou sem zero à esquerda 01 até 12 ou 1 até 12
Ano --- ---
Y Uma representação de ano completa, 4 dígitos Exemplos: 1999 ou 2003
y Uma representação do ano com dois dígitos (que se supõem estar no intervalo 1970-2069) Exemplos: 99 ou 03 (que será interpretado como 1999 e 2003, respectivamente)
Tempo --- ---
a e A Antes/Depois de meio-dia am ou pm
g and h Formato 12-horas de uma hora com e sem zero à esquerda 1 até 12 ou 01 até 12
G and H ormato 24-horas de uma hora com e sem zero à esquerda 0 até 23 ou 00 até 23
i Minutos com zero à esquerda 00 a 59
s Segundos, com zero à esquerda 00 até 59
u Microssegundos (até seis dígitos) Exemplo: 45, 654321
Fuso Horário --- ---
e, O, P e T Identificadores de fuso horário, ou diferença para UTC em horas, ou diferença para UTC com dois pontos entre horas e minutos, ou a abreviação do fuso horário Exemplos: UTC, GMT, Atlantic/Azores ou +0200 ou +02:00 ou EST, MDT
Data/Hora completa --- ---
U Segundos desde Unix Epoch (January 1 1970 00:00:00 GMT) Exemplo: 1292177455
Espaço em branco e separadores --- ---
(espaço) Um espaço ou um TAB Exemplo:
# Um dos símbolos de separação a seguir: ;, :, /, ., ,, -, ( ou ) Exemplo: /
;, :, /, ., ,, -, ( or ) O caractere informado. Exemplo: -
? Um byte randômico Exemplo: ^ (Saiba que em caracteres UTF-8, será necessário mais que um ?. Neste caso, utilizar o * é a mais provável substituição desejada)
* Bytes aleatórios até o próximo separador ou dígito Exemplo: * em Y-*-d como a string 2009-aWord-08 que corresponderá a aWord
! Redefine todos os campo (ano, mês, dia, hora, minute, segundos, fações de segundo e informações do fuso horário) para Unix Epoch Sem !, todos os campos serão definidos para a data e hora atual.
| Redefine todos os campo (ano, mês, dia, hora, minute, segundos, fações de segundo e informações do fuso horário) para Unix Epoch se ainda não foram interpretados até o momento Y-m-d| definirá o ano, mês e dia para a informação encontrada na string analisada, e definirá as horas, minutos e segundos para 0.
+ Se este especificador de formato estiver presente, datas que excedem o limite na string não causarão um erro, mas sim um aviso Utilize o método DateTime::getLastErrors() para encontrar a existência de uma data que excede os limites.

Caracteres desconhecidos na string de formato causarão falhas em sua interpretação e uma mensagem de erro será acrescentada a estrutura retornada. Pode-se recuperar as mensagens de erro com o método DateTime::getLastErrors().

Para incluir caracteres literais no parâmetro format, deve-se escapá-los utilizando a barra invertida (\).

Se o parâmetro format não conter o caractere !, as porções de tempo gerado que não estão especificadas em format serão definidas como a hora atual do sistema.

Se o parâmetro format contiver o caracter !, as porções de tempo geradas que não estão informadas em format, assim como valores à esquerda!, serão definidos para valores correspondentes à Unix epoch.

Unix epoch é 1970-01-01 00:00:00 UTC.

time

String representando a hora.

timezone

Um objeto DateTimeZone representando o fuso horário desejado.

Se o parâmetro timezone for omitido, e o parâmetro time não contiver um fuso horário, o atual será utilizado.

Nota:

O parâmetro timezone e o fuso horário atual são ignorados quando o parâmetro time é um timestamp UNIX (exemplo, @946684800) ou quando o fuso horário é informado (exemplo. 2010-01-28T15:00:00+02:00).

Valor Retornado

Retorna uma nova instância de DateTime ou false em caso de falha.

Changelog

Versão Descrição
5.3.9 O especificador de format + foi adicionado.

Exemplos

Exemplo #1 Exemplo do método DateTime::createFromFormat()

Estilo orientado à objeto

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

Estilo procedural

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

Os exemplos acima irão imprimir:

2009-02-15

Exemplo #2 Complexidades do método DateTime::createFromFormat()

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

$format 'Y-m-d';
$date DateTime::createFromFormat($format'2009-02-15');
echo 
"Format: $format; " $date->format('Y-m-d H:i:s') . "\n";

$format 'Y-m-d H:i:s';
$date DateTime::createFromFormat($format'2009-02-15 15:16:17');
echo 
"Format: $format; " $date->format('Y-m-d H:i:s') . "\n";

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

$format '!d';
$date DateTime::createFromFormat($format'15');
echo 
"Format: $format; " $date->format('Y-m-d H:i:s') . "\n";
?>

O exemplo acima irá imprimir algo similar à:

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

Exemplo #3 String de formato com caracteres literais

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

O exemplo acima irá imprimir algo similar à:

23:15:03

Veja Também

add a note

User Contributed Notes 1 note

up
1
hornlp at telkom dot co dot za
5 days ago
Interesting to note that DateTime::createFromFormat('Y-m-d', $date) can result in a valid date from an incorrect date input. For instance if the $date = '2021-23-23' (an invalid date), the output from this would be '2022-11-23'. Not sure what the internal logic is. I was hoping for a false return. Seems like it could be setting month to 00, and then adding 23 months to get to 2022-11-23.
To Top