5 funções do PHP para trabalhar com data e hora que você precisar conhecer!
Depois de muito tempo sem escrever nada, decidi falar sobre 5 funções para trabalhar com data e hora no PHP.
Calcular ou formatar datas e horas é uma necessidade muito comum no cotidiano do programador, principalmente se estiver trabalhando com sistemas administrativos.
Nesse post vou demonstrar algumas funções do PHP que facilitam muito nossa vida.
Funções PHP para trabalhar com data e hora
1 – date()
A função date() é uma verdadeira mão na roda, por padrão ela recebe um parâmetro string com formato que queremos formatar data e hora local e retorna uma string.
Mas se passarmos um segundo parâmetro com valor timestamp, esse valor será formatado.
1 |
string date ( string $format [, int $timestamp ] ) |
Exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php echo date('d/m/Y'); // Imprime a data atual 21/10/2017 echo date('Y'); // Imprime somente o ano atual 2017 $minha_data = '2017-10-21 10:30:00'; echo date('H:i:s', strtotime($minha_data )); // Imprime somente a hora/minuto/segundo da varável $minha_data 10:30:00 echo date('d/m/Y', strtotime($minha_data )); // Imprime somente a data da varável $minha_data com barras 21/10/2017 |
2 – strtotime()
A função strtotime() retorna um valor timestamp no sucesso ou valor booleano “false” em caso de falha, ela traz algumas variações no primeiro parâmetro que acabam passando uma impressão de complexidade para ser usada.
Essa função recebe uma string no primeiro parâmetro contendo data/hora, os valores aceitos estão explicados em Formatos Data e Hora.
O segundo parâmetro é opcional e pode ser um timestamp que será usado para calcular a data com base no primeiro parâmetro.
1 |
int strtotime ( string $time [, int $now ] ) |
Exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php $minha_data = '2017-10-21 10:30:00'; // Adiciona 1 dia na variável $minha_data $timestamp = strtotime('+1 day', strtotime($minha_data)); // Imprime 22/10/2017 echo date('d/m/Y', $timestamp); $timestamp = strtotime('+1 hour', strtotime($minha_data)); // Adiciona 1 hora na variável $minha_data echo date('H:i:s', $timestamp); // Imprime 11:30:00 |
3 – date_parse()
A função date_parse() retorna um array() associativo contendo informações detalhadas sobre a data e hora passadas como parâmetro, caso ocorra um erro será retornado um valor booleano “false”.
1 |
array date_parse ( string $date ) |
Exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
<?php $minha_data = '2017-10-21 10:30:00'; // Exibe informações sobre a data passada como parâmetro var_dump(date_parse($minha_data)); array(12) { ["year"]=> int(2017) ["month"]=> int(10) ["day"]=> int(21) ["hour"]=> int(10) ["minute"]=> int(30) ["second"]=> int() ["fraction"]=> float() ["warning_count"]=> int() ["warnings"]=> array() { } ["error_count"]=> int() ["errors"]=> array() { } ["is_localtime"]=> bool(false) } |
4 – checkdate()
A função checkdate() retorna uma valor booleano se a data passada como parâmetro for válida no calendário “Gregoriano”.
1 |
bool checkdate ( int $month , int $day , int $year ) |
Exemplo:
1 2 3 4 5 6 7 8 9 10 |
<?php // Data válida retorna TRUE var_dump(checkdate(12, 25, 2017)); //Imprime bool(true) // Data inválida retorna FALSE var_dump(checkdate(2, 30, 2017)); // Imprime bool(false) |
5 – getdate()
A função getdate() retorna um array() associativo com informações a partir do parâmetro “timestamp” que é informado na função.
1 |
array getdate ([ int $timestamp ] ) |
Exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
<?php $minha_data = '2017-10-21 10:30:00'; // Converte a data em timestamp $timestamp = strtotime($minha_data); // Exibe informações sobre o timestamp passado como parâmetro var_dump(getdate($timestamp)); array(11) { ["seconds"]=> int() ["minutes"]=> int(30) ["hours"]=> int(10) ["mday"]=> int(21) ["wday"]=> int(6) ["mon"]=> int(10) ["year"]=> int(2017) ["yday"]=> int(293) ["weekday"]=> string(8) "Saturday" ["month"]=> string(7) "October" []=> int(1508574600) } |
Bônus classe DateTime PHP
Apesar do PHP possuir diversas funções para se trabalhar com data e hora, ainda podemos usar um pouco de orientação a objetos com a classe DateTime() que implementa a interface “DateTimeInterface”.
A classe “DateTime()” possui alguns métodos que também ajudam na manipulação de data e hora no PHP, basta instanciar um objeto e começar a usar como nos exemplos abaixo:
1 – DateTime::add() serve para dicionar um intervalo de tempo em um objeto DateTime:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php $minha_data = '2017-10-21'; // Instância um objeto DateTime passando uma data como parâmetro $date = new DateTime($minha_data); // Adicionar 10 dias na data passada no construtor $date->add(new DateInterval('P10D')); // Exibe a nova data echo $date->format('Y-m-d'); // Imprime 2017-10-31 |
2 – DateTime::format() serve para formatar uma data baseada no formato passado como parâmetro, semelhante a função “date()“:
1 2 3 4 5 6 7 8 9 10 11 |
<?php $minha_data = '2017-10-21 10:30:00'; // Instância um objeto DateTime passando uma data como parâmetro $date = new DateTime($minha_data); // Formata a data para exibição echo $date->format('d/m/Y H:i:s'); // Imprime 21/10/2017 10:30:00 |
3 – DateTime::diff() serve para capturar a diferença entre 2 objetos DateTime:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php $minha_data1 = '2017-10-21'; $minha_data2 = '2017-12-25'; // Instância um objeto DateTime passando a data 1 $datetime1 = new DateTime($minha_data1); // Instância um objeto DateTime passando a data 2 $datetime2 = new DateTime($minha_data2); // Captura a diferença entre a data 1 e a data 2 $interval = $datetime1->diff($datetime2); // Exibe a diferenças em dias echo $interval->format('%R%a dias'); // Imprime +65 dias |
Conclusão
Bom pessoal, nesse post demonstrei 5 funções do PHP para trabalhar com data e hora e ainda escrevi um pouco sobre a classe DateTime do PHP que também tem suas utilidades.
Vou tentar escrever um post por mês pelo menos, mas a demanda de projetos anda muito complicada.
Espero que tenham gostado e até a próxima.