@eldar_web

Как в Ruby on Rails поменять часовой пояс?

Я в locales/aplication.rb написал: config.time_zone = "Moscow" .
Но в моделях когда пишу Time.now, он сохраняет не текущую дату (часы), а раннюю на 3 часа.
Как решить проблему?
И еще, вместо того, чтобы написать Moscow, нельзя сделать другое, чтобы по текущему часовому поясу определила система?
  • Вопрос задан
  • 742 просмотра
Решения вопроса 1
@malroc
Но в моделях когда пишу Time.now, он сохраняет не текущую дату (часы), а раннюю на 3 часа.

Вместо Time.now правильнее использовать Time.zone.now (или Time.current, что примерно одно и то же). В базе данных всё равно всё будет храниться в UTC, но это влияет на взаимодействие с клиентом. В вашем случае разницы не будет, но это потому что серверное и клиентское время у вас одинаковое.

И еще, вместо того, чтобы написать Moscow, нельзя сделать другое, чтобы по текущему часовому поясу определила система?

config.time_zone - это не серверное время (оно как раз читается из системы), это предполагаемый часовой пояс клиента. То есть когда время приходит от клиента/отображается клиенту, оно конвертируется из/в этот пояс.
В общем:
  • Time.now - системное время, в часовом поясе который прописан в системе на сервере
  • Time.zone.now - время клиента, определяется через config.time_zone, либо на ходу через Time.zone =
  • База данных - всё хранится в UTC + 0
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Jeiwan
@Jeiwan
Рельсы сохраняют дату в UTC, а при загрузке данных из БД преобразуют в ту зону, что указана в config.time_zone.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы