Continuando as pesquisas, fui aprender sobre a "Olson" Timezone Database Version: 2016.10 que aparece nas informações do PHP Info e descobri que existe uma versão mais recente, de Jun/2018.
Criei no meu servidor um arquivo para mostrar a data e hora do PHP e descobri que está com 1 hora a mais, provavelmente é esta hora que está sendo gravada pela aplicação no banco de dados.
Criei o arquivo /sga/public/testedata.php com as linhas:
<?php
echo "Hora atual PHP: " . date('d/m/Y H:i:s e T P');
echo "<br>" . "Versão timezonedb: " . timezone_version_get();
echo "<br>" . "Timezone: " . date_default_timezone_get();
echo "<br>" . "Horário verão 1=sim 0=não: " . date('I');
echo "<br>" . phpinfo();
?>
Ao acessar http://(meu servidor)/sga/public/testedata.php mostrou:
- Hora atual PHP: 23/10/2018 17:20:09 America/Sao_Paulo BRST -02:00
- Versão timezonedb: 2016.10
- Horário verão 1=sim 0=não: 1
e em seguida os dados completos da configuração atual do PHP
o BRST após o timezone indica que para o sistema estamos no horário de verão (Brasilia Summer Time)
O que vamos tentar fazer aqui:
- Descobrir como atualizar o Timezone Database no Windows (alguém pode ajudar?)
- Atualizar o PHP para usar o "Olson" Timezone Database Version 2018.6
- Reiniciar o servidor
Provavelmente o 'Timezone Database' foi atualizado em Junho/2018 porque em Dezembro/2017 foi publicado o Decreto Federal 9242/2017 que alterou a data de início do horário de verão no Brasil e este database deve conter a data de início e fim dos horários de verão do mundo.
Até 2017 o horário de verão no Brasil iniciava no 3º domingo de outubro e terminava no 3º domingo de fevereiro. A partir de 2018 vai iniciar no 1º domingo de novembro e terminar no 3º domingo de fevereiro.
Também descobri que o Windows e PHP usam padrões diferentes de timezone.
Windows usa o padrão 'Microsoft Windows Time Zone Database'
PHP, Java e Linux usam o padrão 'The IANA/Olson Time Zone Database'
Microsoft Windows Time Zone Database - lista completa com o comando CMD tzutil /l
Aqui estamos usando: "E. South America Standard Time" = UTC-3:00 Brasília
The IANA/Olson Time Zone Database - lista completa em http://php.net/manual/en/timezones.php
Aqui estamos usando: America/Sao_Paulo
Links
https://stackoverflow.com/tags/timezone/info - explica sobre os padrões de timezone
https://derickrethans.nl/advent21.html - mostra que o banco de dados é atualizado se algum país muda as regras
http://php.net/manual/en/timezones.php - informa que existe o database Olson de Jun/2018
http://pecl.php.net/package/timezonedb - download do Olson timezone database atual: timezonedb-2018.6.tgz
https://stackoverflow.com/questions/13524812/setting-a-php-timezone-cant-update-to-recent-olson
aqui um russo reporta 5 anos atrás um problema semelhante, a Rússia alterou o horário de verão e ele precisou atualizar o banco de dados de timezone Olson e reiniciar o servidor
http://php.net/manual/pt_BR/function.date.php - mostra os parâmetros para mostrar uma data no PHP
https://en.wikipedia.org/wiki/Time_in_Brazil - mostra os timezones do Brasil
https://www.timeanddate.com/news/time/brazil-postpones-dst-2018.html - notícia sobre a mudança de horário de verão no Brasil em site que registra as mudanças no mundo