Pare de recriar a roda: Tudo o que você precisa para trabalhar com datas no PHP

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.

Victor Vaz Autor

Fundador do Cafeína Codificada, formado em Sistemas Web pela UNIBH e um apaixonado por música.

Deixe um comentário

O seu endereço de e-mail não será publicado.