Desmistificando e dominando datas com PHP
Tags: php, laravel, frontend, backend
Published: 2021-03-22 22:35:00

Salve salve pessoal tudo tranquilo? Espero que sim :D

Trabalhar com datas muitas vezes podem ser complicadas e até mesmo estressantes pois mesmo fazendo os diversos testes, ainda assim o meu resultado pode ser diferente do seu.

Por esse motivo, resolvi fazer esse artigo para ajudar a comunidade bem como para ficar como um artigo de consulta rápida pois, eu pesquisei muito e quebrei muito a cabeça para tentar entender certas funções e validá-las.

## O tal fuso horário

Como muitos sabem, um dos maiores problemas em várias partes do mundo e também pode ser um grande problema na criação do seu aplicativo/software são datas inconsistentes por questão do fuso horário. 

O Brasil por exemplo possui 4 fuso horário do GMT-2 até GMT-5 por esse motivo existe o famoso horário padrão de Brasília (GMT-3).

Para “setar” em uma aplicação PHP o fuso horário, basta adicionar o código abaixo (considerando horário padrão de Brasília).

```
<?php
    // Sem o Fuso definido
    echo date(‘H:i:s’) . ‘<br>’;
    // Com Fuso definido
    date_default_timezone_set('America/Sao_Paulo');
    echo date(‘H:i:s’);
?>
```

E para verificar quais são os Fusos disponíveis, basta adicionar:

```
<?php
    print_r(timezone_identifiers_list());
?>
```

## O que é esse H:i:s?

Para quem está iniciando no PHP e vem de outra linguagem por exemplo, são caracteres que são identificados e convertidos em data e horário. Abaixo segue uma lista dos mais utilizados. (Não se preocupe, ao final desse artigo irei postar todas as referências de forma completa).

Data:
Caractere | Descrição | Exemplo
d | Dia do mês com zero a esquerda | 01 até 31
m | Representa o Mês com zero a esquerda |01 até 12
y | Representa o ano com 2 algarismos | 21 (pode ser 1921 ou 2021)
Y | Representa o ano com 4 algarismos | 2021

Hora:
Caractere | Descrição | Exemplo
H | Hora em formato de 24 horas | 00 até 23
i | Minutos com zero a esquerda | 00 até 59
s | Segundos com zero a esquerda | 00 até 59

Nota-se que deve ser respeitado os caracteres conforme sua “caixa” pois são “case-sensitives”.

Segue um exemplo de data e hora atual:

```
<?php 
   echo ‘d/m/Y H:i:s’;
?>
```

## Minha data está no padrão americano e agora?

Esse é um dos problemas mais recorrentes que vejo e que passei durante os anos trabalhando com o PHP o converte data de EN para PT_BR e vice-versa.

Antigamente era muito recorrente ver funções de conversão utilizando a função explode() do PHP (função que quebra uma sentença em array por meio de um caracter) e querendo ou não isso pode consumir uma grande quantidade de memória na exibição de um relatório por exemplo.

Por esse motivo, apresento-lhes o strtotime uma função que pega uma data em formato de string e transforma em um Integer Unix Timestamp.

Essa função recebe dois parâmetros, o formato e a data em formato de string conforme exemplo abaixo:

```
<?php
    $data = '2021-03-22T18:44:00';
    echo date('d/m/Y - H:i:s ', strtotime($data));
?>
```

Nesse nosso exemplo, ele pegou uma data tipicamente do Javascript e transformou em uma data/horário em PT_BR sem a necessidade de usar o explode ou outro meio qualquer.

Espero que esse artigo tenha ajudado muita gente e comenta ai o que você achou ou o que você gostaria de ver. 

Grande abraço…

Ahhh e as referências que não podem faltar :D:
https://www.php.net/manual/pt_BR/timezones.php
https://www.php.net/manual/pt_BR/function.strftime.php
https://www.php.net/manual/pt_BR/function.date.php