Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Armazenando valores de data/hora específicos para usuários em fusos horários diferentes


Já que você está falando sobre agendamento de futuro tempo, armazenando somente UTC não é necessariamente a melhor abordagem.

Tenha em mente que as regras de fuso horário podem (e mudam). Se você aplicar uma atualização aos seus dados de fuso horário (em PHP, isso é feito com o timezonedb do PECL pacote), todos os dados que você já converteu para UTC podem ser inválidos.

A melhor solução é armazenar vários valores:

  • A data e hora locais originais

  • O fuso horário original (por exemplo, "America/New_York" )

  • A data e hora UTC, convertidas dos valores locais

Quando você quiser ver se é hora de executar a tarefa, compare a data e hora UTC atuais com o valor UTC armazenado.

Ao aplicar atualizações de fuso horário, você descarta os valores UTC convertidos anteriores para todas as entradas futuras e recalcula os novos com base nos dados atualizados.

Se você não fizer isso, estará perdendo a intenção que o usuário forneceu originalmente. E se você não mantiver seus dados de fuso horário atualizados, seu sistema não estará ciente de várias mudanças acontecendo ao redor do mundo, como as mudanças feitas no Egito no início deste ano, ou as mudanças que virão em outubro para a Rússia.

Último ponto - Se implementado corretamente, o fuso horário do seu servidor não deve importar. Compare UTC com UTC.