Trabalhar com manipulação de datas é extremamente importante no desenvolvimento, manutenção de sistemas e para facilitar nosso dia a dia. O PHP possui várias funções para trabalhar com datas.
As funções e classes relacionadas a data e hora não necessitam de instalação de extensão, pois são nativas do PHP.
Ao longo desse artigo vamos mostrar de forma conceitual e prática como utilizar estas funções e classes.
Função date()
Sintaxe
date ( string $format [, int $timestamp = time() ] ) : string
A função date()
recebe dois parâmetros, o primeiro é uma string de formato e o segundo é o timestamp que é um valor inteiro e opcional, por isto na sintaxe ele vem entre colchetes.
Veja abaixo um exemplo de código para exibir o dia e a hora atual:
// ANO-MÊS-DIA HORA:MINUTO:SEGUNDO
echo date('Y-m-d H:i:s') . PHP_EOL;
// Saída: 2020-12-03 20:56:30
Repare que cada letra passada como argumento tem um retorno diferente. Por exemplo, H formato de 24 horas de uma hora (00 a 23).
A seguir outras formas de formatação de saída da função date()
.
Caracter | Descrição |
---|---|
d | Dia do mês, 2 dígitos com zero à esquerda |
D | Uma representação textual de um dia, três letras |
l ('L' minúsculo) | A representação textual do dia da semana |
z | O dia do ano (iniciando em 0) |
F | Representação completa de um mês, como January ou March |
m | Representação numérica de um mês, com zero à esquerda |
Y | Representação de ano completa, 4 dígitos |
y | Representação do ano com dois dígitos |
Dica
Você pode utilizar a função
date()
para atualizar automaticamente o ano dos direitos autorais em seu site. Veja o exemplo:
© 2015-<?php echo date('Y');?>
Conheça agora alguns caracteres comumente usados para horários:
Caracter | Descrição |
---|---|
H | formato de 24 horas de uma hora (00 a 23) |
h | formato de 12 horas de uma hora com zeros à esquerda (01 a 12) |
i | Minutos com zeros à esquerda (00 a 59) |
s | segundos com zeros à esquerda (00 a 59) |
a | Ante meridiem minúsculo e Post meridiem (am ou pm) minúsculo |
A | Ante meridiem minúsculo e Post meridiem (am ou pm) maiúsculo |
Para exibir a hora atual no formato especificado, basta executar o código abaixo:
echo 'Em Brasíla: ' . date('H:i:s') . ' horas...' . PHP_EOL;
// exibe o horário atual do servidor
Trabalhando com fuso horário
Se ao executar o código acima a hora exibida não estiver correta, provavelmente é porque seu servidor está configurado para um fuso horário diferente do seu.
Se você precisa que o horário esteja correto de acordo com um local específico, terá que definir o fuso horário que deseja usar utilizando a função date_default_timezone_set()
.
Veja um exemplo que define o fuso horário para 'America / New_York' e, em seguida, exibe a hora atual no formato especificado:
date_default_timezone_set('America/New_York');
echo 'Hora atual em Nova York: ' . date('H:i:s a') . PHP_EOL;
date_default_timezone_set('America/Sao_Paulo');
echo 'Hora atual em São Paulo: ' . date('H:i:s a') . PHP_EOL;
Obs: É possível ver a lista de fusos horários suportados pelo DateTimeZone na própria documetação do PHP.
Outra forma de exibir a data e a hora é utilizando a função mktime()
. Ela recebe como parâmetros (hora, minuto, segundo, mês, dia, ano).Note que todos os argumentos são obrigatórios. Caso você não precise usar algum deles, basta preencher com 0
como vemos neste exemplo:
$date = mktime(0, 0, 00, 12, 02, 2020);
echo 'Criado em: ' . date('d-m-Y ', $date) . PHP_EOL;
// Saída: Criado em: 02-12-2020
DateTime
Vimos até agora o uso de algumas funções date
, mas é possível também utilizar orientação a objetos para fazer essas manipulações. Com a classe DateTime podemos instanciar e obter a data e hora atuais, por exemplo.
// Pega o momento atual
$today = new DateTime();
// Exibe no formato desejado
echo $today->format('Y-m-d') . PHP_EOL;
Observe que neste exemplo, nenhum parâmetro foi passado para o construtor da classe DateTime, então o momento atual foi exibido.
Adicionando datas
Você pode também adicionar datas de várias maneiras. Uma delas é especificando nos argumentos da classe DateTime. Ela recebe como parâmetro uma string de formato de data em inglês ou também uma string com uma data específica. Veja abaixo alguns exemplos:
$agora = new DateTime('now'); // ou sem parâmetro
$amanha = new DateTime('tomorrow');
$proximo_ano = new DateTime('next year');
$data_aleatoria = new DateTime('2000-10-10');
echo $agora->format('Y-m-d') . PHP_EOL;
echo $amanha->format('Y-m-d') . PHP_EOL;
echo $proximo_ano->format('Y-m-d') . PHP_EOL;
echo $data_aleatoria->format('Y-m-d') . PHP_EOL;
OBS: Em PHP variáveis podem ter acento no nome mas é bom evitar para não ter problemas com diferentes codificações de caracteres em diferentes sistemas operacionais.
Adicionando datas - strtotime()
A função strtotime()
recebe como parâmetro uma string de formato de data em inglês e tenta analisar esse formato. É como tentar transformar uma frase que possui possíveis informações de data em uma data real, como mostra o código a seguir:
$data = strtotime('tomorrow');
echo date('Y-m-d', $data) . PHP_EOL;
$data = strtotime('next Friday');
echo date('Y-m-d', $data) . PHP_EOL;
$data = strtotime('+3 Months');
echo date('Y-m-d', $data) . PHP_EOL;
Agora imagine que você precise listar os próximos sábados a partir da data atual... No exemplo a seguir você consegue fazer isso facilmente utilizando a função strtotime()
.
Veja:
$data = strtotime('Sunday');
$data_final = strtotime('+4 weeks', $data);
while ($data < $data_final) {
echo date('F d', $data) . PHP_EOL;
$data = strtotime('+1 week', $data);
}
Adicionando datas - DateTime::add
Outra forma de adicionar datas é utilizar o método add
da classe DateTime
. Com ele é possível acrescentar uma quantidade de dias, meses, anos, horas, minutos e segundos em um objeto DateTime
passando para o método add
a quantidade de períodos como no exemplo abaixo.
- P5D: Período de cinco dias
- P2M: Período de dois meses
- PT10S: Período de dez segundos
- P2YT20M: Período de dois anos e vinte minutos
Veja o como utilizar:
$diff1Year = new DateInterval('P1Y');
$diff10Hours = new DateInterval('PT10H');
// Adiciona 1 ano em $date1
$date1 = new DateTime('2020-12-02 08:00:00');
$date1->add($diff1Year);
print_r($date1);
// Adiciona 10 horas em $date2
$date2 = new DateTime('2020-12-02 08:00:00');
$date2->add($diff10Hours);
print_r($date2);
Vimos até agora várias formas de adicionar datas e períodos usando funções e classes Date PHP. Mas, e se quiséssemos saber o intervalo entre duas datas?
Subtraindo datas
Da mesma maneira que conseguimos adicionar datas e horas, também podemos subtrair um determinado período sobre um objeto da classe DateTime
utilizando a função sub()
. Confira como é fácil.
$date = new DateTime();
$date->sub(new DateInterval('P10D'));
// Retorna a data atual - 10 dias
print_r($date);
Diferença de datas
Calcular a diferença de datas no PHP é muito simples de se fazer utilizando o método diff()
.
Imagine que você queira descobrir quantos dias de vida tem uma pessoa...
$data1 = new DateTime('1984-01-01');
$data2 = new DateTime();
$intervalo = $data1->diff($data2);
echo $intervalo->format('Total de dias: %a') . PHP_EOL;
echo $intervalo->format('Anos: %y %m meses e %d dias') . PHP_EOL;
Parabéns! Você acabou de descobrir que tem alguns muitos dias de vida.
Concluindo
Manipular datas e hora no PHP é bem fácil! Não é necessário utilizar nenhuma biblioteca externa para isso pois ele trás funções e classes nativas. Com elas você pode fazer diversas operações envolvendo comparação, adição, subtração de datas e muito mais.
Para conferir um pouco mais sobre o mundo de possibilidades de se trabalhar com datas e horas no PHP, consulte sua documentação. Lá você verá uma lista completa de funções e poderá tranquilamente realizar diversas operações.
Top comments (0)