Date :: create_from_string () Problema de fuso horário

Estou usando o FuelPHP 1.6.1 no meu Mac. Quando eu uso, Date::create_from_string('1970-01-01 00:00:00', 'mysql')->get_timestamp();ele converte a data e hora para o fuso horário local antes de enviá-lo para Date::forge();. Portanto, ele retorna -3600 em vez de 0; Fuel::$timezoneestá definido como “Europa / Berlim”.

A função é relativamente inútil, pois funciona pressupondo que o fuso horário da string é o mesmo que o fuso definido por Fuel::init();. Às vezes, este não é o caso, por exemplo, quando o servidor MySQL está em UTC, mas o servidor PHP está em um fuso horário diferente. Seria melhor se houvesse um parâmetro de fuso horário extra (pelo menos padronizado para UTC) para definir o fuso horário temporariamente antes mktime()da Linha 174 decore/classes/date.php ser chamada, especialmente quando você espera que os timestamps SEMPRE estejam em GMT, o que Date::forge()é.

Como solução alternativa, apenas chamo Date::forge(strtotime('01 Jan 1970 00:00:00 UTC'), 'UTC');para torná-lo mais utilizável por outras funções, como format();.

(Postado originalmente nos Fóruns FuelPHP .)


Harro Verton, o líder do projeto para FuelPHP, então respondeu:

Isso já foi abordado na base de código 2.0, onde Date foi completamente reescrito para ser (entre outras coisas) totalmente ciente do fuso horário.

O FuelPHP acabou de lançar 1.7 em outubro de 2013, e provavelmente poderemos ver 2.0 no próximo ano. Por enquanto, certifique-se de ter seus casos de fuso horário devidamente testados antes de entrar em produção. Felicidades!