Manipulando datas com PHP
Neste artigo vamos ver diferentes formas de trabalhar com datas no PHP.
Vamos começar vendo como retornar a data atual com PHP
Utilizando a função date(), podemos formatar a data atual de várias formas:
echo date("d/m/Y"); // Retorna a data atual no formado dia/mes/ano
echo date("H:i:s"); // Retorna o horário atual no formato hora:minuto:segundos
echo date("d/m/Y H:i:s") //Retorna a data e hora atual
Outra função que trabalha com data e hora é a função time(), ela retorna um valor numérico de 11 algarismos chamado UNIX TIMESTAMP, que representa o número de segundos que se passaram desde 1970.
echo time(); // Retorna o timestamp atual
Para retornar o timestamp de uma data, você pode utilizar a função mktime(). Ela recebe os seguintes parâmetros: hora, minuto, segundo, mes, dia e ano.
echo mktime(15, 09, 10, 08, 15, 2020);
Com base em um determinado timestamp, podemos separar as suas informações e guardar num array associativo usando a função getdate()
$data = '2020-08-15 15:09:10';
$timestamp = strtotime($data);
print_r(getdate($timestamp));
Para pegar uma data gravado no MySQL (Ano-Mês-Dia) e converter para o formato de data que utilizamos, que é dia/mes/ano, podemos usar a função strtotime() para converter a data do MySQL em um timestamp, e depois usar a função date() para formatar o resultado da forma que desejamos.
$data_mysql = '2020-08-15 15:09:10';
$timestamp = strtotime($data_mysql);
echo date('d/m/Y', $timestamp);
Perceba que nos exemplos anteriores da função date() foi utilizado apenas um parâmetro, que aplicava a formatação do resultado na data/hora atual. Quando a função date() recebe um timestamp como segundo parâmetro, a formatação informada no primeiro parâmetro é aplicada para o timestamp informado.
A função strtotime() também pode ser utilizada para adicionar ou substrair um período de tempo de uma data informada. Exemplos:
$data = "2020-08-15";
$timestamp1 = strtotime($date);
$timestamp2 = strtotime('+10 day', $timestamp1);
Para transformar a data num array associativo, separando cada uma de suas informações podemos usar a função date_parse().
$minha_data = '2020-08-15 15:04:00';
$resultado = date_parse($minha_data);
print_r($resultado);
E para validar se uma data é válida, podemos usar a função checkdate (mes,dia,ano)
print_r(checkdate(08, 15, 2020));
Agora vamos ver como calcular a diferença entre duas datas. Para nos ajudar, o PHP possui uma classe chamada DateTime, disponível deste a versão 5.2 do PHP, que nos permite fazer estas comparações:
$data_inicial = new DateTime('2020-01-01 00:00:00');
$data_final = new DateTime('2020-08-15 15:14:00');
$intervalo = $data_final->diff($data_inicial);
print_r($intervalo);
O resultado é um objeto com vários tipos de resultados, você pode obter a diferença entre estas duas datas por dias, horas, meses ou semanas. Para ver a diferença de dias entre duas datas, bastaria fazer isso:
$data_inicial = new DateTime('2020-01-01 00:00:00');
$data_final = new DateTime('2020-08-15 15:14:00');
$intervalo = $data_final->diff($data_inicial);
echo $intervalo->d;
A classe DateTime pode substituir vários dos exemplos que vimos no começo deste artigo. Vamos ver alguns exemplos a seguir.
Para formatar uma data, utilizamos o método format.
$data = '2020-08-15';
$date = new DateTime($data);
echo $date->format('Y-m-d');
Para adicionar uma quantidade de dias a uma data, podemos fazer da seguinte forma:
$data = '2020-08-15';
$date = new DateTime($data);
$date->add(new DateInterval('P10D'));
echo $date->format('Y-m-d');
No exemplo acima adicionamos 10 dias a data informada.