Categories
Uncategorized

Ajustando fuso horário no PHP

Algumas aplicações precisam saber o fuso horário para realizar algumas ações específicas e pode ser uma boa ideia ajustar o date.timezone[1] nas configurações do PHP para essas aplicações.

Se o comando abaixo não exibir nenhuma saída, provavelmente o date.timezone não está configurado.

$ php -r "echo ini_get('date.timezone');"
>>>

É possível verificar a string que será exibida pela aplicação com o comando date[2] e o corrente fuso horário usando o comando abaixo.

$ php -r "echo date('r');"
>>> Fri, 22 Nov 2019 14:28:03 +0000

O +0000 indica que o fuso horário atual é o UTC, que é padrão do PHP quando o date.timezone não está configurado.

Depois de pegar uma opção de fuso horário a partir da documentação[3] do PHP, o teste para verificar se esta opção dará o resultado esperado pode ser feito com o comando abaixo, supondo que a opção escolhida seja America/Sao_Paulo.

$ php -d date.timezone=America/Sao_Paulo -r "echo date('r');"
>>> Fri, 22 Nov 2019 11:35:38 -0300

O -0300 indica o fuso horário America/Sao_Paulo. Para persistir esta configuração devemos definir date.timezone no arquivo php.ini. O lugar deste arquivo pode variar conforme a distro usada.

No Archlinux, todos os arquivos com extensão .ini presentes no diretório /etc/php/conf.d vão fazer parte do php.ini. O comando abaixo adiciona a configuração de fuso horário às configurações do PHP.

# echo date.timezone=America/Sao_Paulo >> /etc/php/conf.d/my-customs.ini

Feito isto, é possível rodar os mesmos comandos acima para verificar se as configurações de fuso horário estão funcionando corretamente.

$ php -r "echo ini_get('date.timezone');"
>>> America/Sao_Paulo

$ php -r "echo date('r');"
>>> Fri, 22 Nov 2019 11:51:25 -0300

Referências

  1. https://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
  2. https://www.php.net/manual/en/function.date.php
  3. https://www.php.net/manual/en/timezones.php