Curso de PHP: #19 - Manipulando Datas

Curso de PHP: #19 - Manipulando Datas

·

5 min read

Seja muito bem-vindo de volta, pequeno escoteiro! No post anterior nos vimos uma maneira extremamente simples e rápida de ler e gravar arquivos em nosso HD/SSD. No post de hoje vamos aprender a manipular com o PHP.

Se alguém perguntasse para você como salvar a data de nascimento de uma pessoa numa variável, provavelmente você diria que é só colocar numa string

Exemplo

<?php

$dataDeNascimento = "01/02/2003";

echo "Você nasceu no dia: $dataDeNascimento";

Não está de todo errado, mas o problema é que muita vezes precisamos fazer diversos tratamentos em cima dessa data, e trabalhar com ela no formato de string dificulta muito a nossa vida. Pensando nisso o time de desenvolvimento do PHP criou algumas funções que tornam a tarefa de trabalhar com data muito mais simples.

date

A função date é uma verdadeira carta na manga na hora de trabalhar com datas, ela pode tanto obter a data atual do computador onde o script está sendo executado, como formatar uma data para um formato específico.

Veja esse exemplo:

<?php

echo date("d/m/Y");

Se você executar o código acima, será impressa no console a data atual.

Você pode inclusive obter tanto a data quanto a hora atual:

<?php

echo date("d/m/Y H:i:s");

Se você executar o código acima no Replit, verá que a data e hora impressa pode não coincidir com a sua data e hora. O problema é que como eu disse acima, o PHP obtém a data e hora do computador onde o script está sendo executado, que nesse é o servidor do Replit que fica nos EUA. Mas podemos ensinar ao PHP a calcular a diferença de fuso horário para mostrar a data local do Brasil.

<?php

date_default_timezone_set("America/Sao_Paulo");

echo date("d/m/Y H:i:s");

A função date_default_timezone_set, como o próprio nome sugere, define o timezone padrão que será utilizado para as datas, que nesse caso foi o "America/Sao_Paulo".

Você pode ver a lista completa de timezones na documentação do PHP.

Mas, voltando à função date... Como primeiro parâmetro passamos uma string que representa o formato da data que receberemos de retorno. Você pode tranquilamente utilizar barras, traços, etc... porém é importante entender algumas coisas:

  • d (minúsculo) representa o dia, ou seja, de 01 até 31;
  • m (minúsculo) representa o mês, ou seja, de 01 até 12;
  • Y (maiúsculo) representa o ano com 4 digitos, caso você queira representar o ano com apenas 2 dígitos, use "y" (minúsculo);
  • H (maiúsculo) representa a hora no padrão 24h. Caso você queira representar no padrão de 12h, utilize h (minúsculo);
  • i (minúsculo) representa os minutos (é estranho, eu sei, mas o "m" já é usado para mês);
  • s (minúsculo) representa os segundos;

Você não precisa decorar todas essas letras (apesar de que com o tempo você acaba decorando), você pode obter a lista completa aqui.

Conversão de formatos de data

Não são raras as vezes em que precisamos converter datas no PHP. Praticamente todas as linguagens de programação trabalham com formato de data americano, então muito comumente você encontrará datas salvas assim:

<?php

$dataDeNascimento = "2015-05-22";

Para converter para o formato brasileiro você pode usar a função date, mas tem um detalhezinho que vou explicar logo após esse exemplo:

<?php

$dataDeNascimento = "2015-05-22";

$dataConvertida = date("d/m/Y", strtotime($dataDeNascimento));

echo $dataConvertida;

O segundo parâmetro da função date (quando utilizado) é o timestamp da data que será convertida. Porém como é bem complicado para nós calcular o timestamp, o PHP já se antecipou e nos forneceu a função strtotime que como o próprio nome (string to time) sugere, converte uma string para um time. Logo, o que estamos passando como segundo parâmetro para a função date, é o retorno da função strtotime.

Se você executar o script acima verá impresso no console: 22/05/2015.

Analisando diferença entre datas

Você pode querer saber qual entre duas datas é a mais recente. É possível fazer isso com PHP

<?php

$nascimentoPedro = "2012-12-15";
$nascimentoJulia = "2008-08-22";

if (strtotime($nascimentoPedro) < strtotime($nascimentoJulia)) {
    echo "Pedro é mais velho!";
} else if (strtotime($nascimentoPedro) > strtotime($nascimentoJulia)) {
    echo "Júlia é mais velha!";
} else {
    echo "Eles têm a mesma idade!";
}

Perceba que não estamos analisando diretamente a string da data, mas sim o time dela.

Existe uma classe nativa do PHP para calcular datas, muito mais poderosa, mas por enquanto não vamos falar sobre ela para não dificultar o seu aprendizado.

Espero que você tenha curtido, e vamos de desafio!

Desafio

Escreva um programa que peça que o usuário usuário informe uma data e uma hora que ele pretende sair.

  • Se ele informar uma data que seja num sábado ou domingo e o horário for entre 07h da manhã e 15h, imprima: Sugiro que você vá para a praia!

  • Se ele informar uma data que seja num sábado ou domingo e o horário for entre 15h01 e 22h, imprima: Sugiro que você vá ao cinema!

  • Se ele informar uma data que seja num sábado ou domingo e o horário for entre 22h01 e 06h59, imprima: Sugiro que você vá dormir!

  • Se ele informar uma data que seja num dia útil (segunda-feira à sexta-feira) e o horário for entre 07h e 18h, imprima: Sugiro que você vá trabalhar!

  • Se ele informar uma data que seja num dia útil (segunda-feira à sexta-feira) e o horário for entre 18h01 e 06h59, imprima: Sugiro que você vá descansar!

Até a próxima, escoteiro!