Todo programador PHP já precisou, ao menos em algum momento de sua jornada, trabalhar com datas no PHP. Elas estão presentes em praticamente todos os projetos e você precisa aprender algumas dicas bem interessantes para agilizar o seu trabalho. Afinal, o prazo é sempre curto.
Neste post você aprenderá:
- Sobre a função date()
- Como pegar uma data atual
- Gravar uma data no banco de dados
- Verificar se está no horário de verão
- Sobre a função time()
- Como pegar o Unix timestamp atual
- Como mostra um Unix timestamp em formato de data
- Sobre a função mktime()
- Como utilizar a função mktime() para pegar um Unix timestamp de uma determinada data
- Sobre a função strtotime()
- Possibilidades incríveis para pegar determinadas datas de forma simples
- Converter uma data em formato americano para o formato brasileiro
- Sobre a função strftime()
- Mostrar no idioma português-br uma data por extenso.
Vamos lá!
A função date()
Usaremos a função date() para pegar uma data no formato string. A função date possui a sintaxe abaixo:
string date(string $format [, int $timestamp])
No parâmetro $format, informaremos com uma string o formato da data que desejamos. O parâmetro $timestamp, que é opcional, tem o objetivo de informar a data no formato Unix timestamp que deverá ser tratada. Caso não seja informado, a data a ser tratada será a data atual.
A string que será informada no parâmetro $format, poderá ser construída com os caracteres abaixo:
Caractere de format |
Descrição | Exemplo de valores retornados |
---|---|---|
Day | — | — |
d | Dia do mês, 2 digitos com preenchimento de zero | 01 até 31 |
D | Uma representação textual de um dia, três letras | Mon até Sun |
j | Dia do mês sem preenchimento de zero | 1 até 31 |
l (‘L’ minúsculo) | A representação textual completa do dia da semana | Sunday até Saturday |
N | Representação numérica ISO-8601 do dia da semana (adicionado no PHP 5.1.0) | 1 (para Segunda) até 7 (para Domingo) |
S | Sufixo ordinal inglês para o dia do mês, 2 caracteres | st, nd, rd ou th. Funciona bem com j |
w | Representação numérica do dia da semana | 0 (para domingo) até 6 (para sábado) |
z | O dia do ano (começando do 0) | 0 through 365 |
Semana | — | — |
W | Número do ano da semana ISO-8601, semanas começam na Segunda (adicionado no PHP 4.1.0) | Exemplo: 42 (the 42nd week in the year) |
Mês | — | — |
F | Um representação completa de um mês, como January ou March | January até December |
m | Representação numérica de um mês, com leading zeros | 01 a 12 |
M | Uma representação textual curta de um mês, três letras | Jan a Dec |
n | Representação numérica de um mês, sem leading zeros | 1 a 12 |
t | Número de dias de um dado mês | 28 through 31 |
Year | — | — |
L | Se está em um ano bissexto | 1 se está em ano bissexto, 0 caso contrário. |
o | Número do ano ISO-8601. Este tem o mesmo valor como Y, exceto que se o número da semana ISO (W) pertence ao anterior ou próximo ano, o ano é usado ao invés. (adicionado no PHP 5.1.0) | Exemplos: 1999 ou 2003 |
Y | Uma representação de ano completa, 4 dígitos | Exemplos: 1999 ou 2003 |
y | Uma representação do ano com dois dígitos | Exemplos: 99 ou 03 |
Tempo | — | — |
a | Antes/Depois de meio-dia em minúsculo | am or pm |
A | Antes/Depois de meio-dia em maiúsculo | AM or PM |
B | Swatch Internet time | 000 até 999 |
g | Formato 12-horas de uma hora sem preenchimento de zero | 1 até 12 |
G | Formato 24-horas de uma hora sem preenchimento de zero | 0 até 23 |
h | Formato 12-horas de uma hora com zero preenchendo à esquerda | 01 até 12 |
H | Formato 24-horas de uma hora com zero preenchendo à esquerda | 00 até 23 |
i | Minutos com zero preenchendo à esquerda | 00 até 59 |
s | Segundos, com zero preenchendo à esquerda | 00 até 59 |
u | Milisegundos (adicionado no PHP 5.2.2) | Exemplo: 54321 |
Timezone | — | — |
e | Identificador de Timezone (adicionado no PHP 5.1.0) | Exemplos: UTC, GMT, Atlantic/Azores |
I (capital i) | Se a data está ou não no horário de verão | 1 se horário de verão, 0 caso contrário. |
O | Diferença para Greenwich time (GMT) em horas | Exemplo: +0200 |
P | Diferença para Greenwich time (GMT) com dois pontos entre horas e minutos (adicionado no PHP 5.1.3) | Exemplo: +02:00 |
T | Abreviação de Timezone | Exemplos: EST, MDT … |
Z | Timezone offset in seconds. The offset for timezones west of UTC is always negative, and for those east of UTC is always positive. | -43200 até 50400 |
Full Date/Time | — | — |
c | ISO 8601 date (adicionado no PHP 5) | 2004-02-12T15:19:21+00:00 |
r | » RFC 2822 formatted date | Exemplo: Thu, 21 Dec 2000 16:01:07 +0200 |
U | Segundos desde a Época Unix (January 1 1970 00:00:00 GMT) | Veja também time() |
Portanto, caso queira pegar a data atual no PHP, você poderá usar esse parâmetro da seguinte maneira:
$dataAtual = date('d/m/Y'); # 11/03/2016
Caso você esteja usando o MySQL, por exemplo, e quer gravar a data no banco, você pode pegar a data assim:
$dataAtual = date('Y-m-d H:i:s'); # 11/03/2016 09:45:12
Podemos também saber se uma data está no horário de verão utilizado I (i maiúsculo):
echo date('I') ? 'Está no horário de verão' : 'Não está no horário de verão'
A função time()
A função time() retorna a data no formato Unix timestamp. Esse formato é a data no total de segundos que se passaram de 1970 até a data atual.
Se você quer pegar o Unix timestamp atual, você pode fazer assim:
echo time(); # Mostra o tempo em segundos, por exemplo: 1247955126
Caso você gravou um Unix timestamp em algum lugar e quer mostrar qual data que é referente à aquele Unix timestamp, você poderá usar:
$data = date('d/m/Y H:i:s', $timeStamp); # Mostra a data que foi gravada no formato Unix timestamp
A função mktime()
A função mktime() é muito boa para pegarmos um Unix timestamp de uma determinada data no futuro ou no passado. Sua sintaxe é muito simples:
int mktime([int $hora, int $minuto [,int $segundo [, int $mes [, int $dia [, int $ano [, int $is_dst ]]]]]]] )
Os parâmetros são, respectivamente, a hora, o minuto, o segundo, o mês, o dia, o ano e se está no horário de verão ou não (1 para sim e 0 para não) da data que você quer.
Por exemplo, se queremos pegar um unix timestamp de ontem, podemos fazer assim:
$ontem = mktime(14, 30, 45, 03, 10, 2016); # Pega o Unix timestamp de 10/03/2016 14:30:45
A função strtotime()
A função strtotime() retorna um Unix timestamp através de uma data no formato americano. Ela possui a seguinte sintaxe:
int strtotime( string $time [, int $now] )
No parâmetro $time passamos a data no formato americano. O parâmetro opcional $now é o Unix timestamp utilizado para calcular o valor retornado.
Podemos utilizado de várias maneiras. Conheça algumas:
strtotime('now'); # Unix timestamp atual
strtotime('13 september 2014'); # Unix timestamp de 13 de setembro de 2014
strtotime('+1 day'); # Unix timestamp de amanhã
strtotime('+1 week'); # Unix timestamp da semana que vem
strtotime('+ 1 week 2 days 4 hours 2 seconds'); # Unix timestamp da semana que vem acrescida de 2 dias, 4 horas e 2 segundos
strtotime('next Thursday'); # Unix timestamp da próxima quinta-feira
strtotime('last Monday'); # Unix timestamp da última segunda-feira
Podemos utilizá-lo, também, para converter uma data no formato americano para o formato brasileiro:
echo date('d/m/Y H:i:s', strtotime('2016-03-11 10:26:55')); # 11/03/2016 10:26:55
Função strftime()
A função strftime() é utilizada para escrever as datas de acordo com o local definido. Sua sintaxe é assim:
string strftime ( string $format [, int $timestamp = time() ] )
Informamos o formato que a data deverá vir no parâmetro $format. No parâmetro $timestamp informamos o Unix timestamp data que deverá ser tratada. Caso não seja informada, é utilizado o Unix timestamp da data atual.
Veja que simples:
setlocale(LC_ALL, 'pt_BR', 'pt_BR.utf-8', 'pt_BR.utf-8', 'portuguese');
date_default_timezone_set('America/Sao_Paulo');
echo strftime('%A, %d de %B de %Y', strtotime('today')); # sexta-feira, 11 de março de 2016
Sendo que %A é o dia da semana por extenso, %d é o dia do mês representado com 2 dígitos, %B o mês por extenso e o %Y é o ano com 4 dígitos.