Откуда Rails берет свой DateTime.now? - PullRequest
0 голосов
/ 29 октября 2018

Недавно я хотел изменить updated_at столбец сообщения, но это не так просто!

Тем не менее, серверное время 12:06, а когда я использую консоль (irb), оно 12:06 Также пробовал:

irb(main):001:0> Time.zone.to_s
=> "(GMT+03:00) Moscow"

Все еще, когда я делаю:

post.update!(updated_at: DateTime.now)
=> true

И если я получу запись, результат будет "2018-10-29 09:06:47"

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 29 октября 2018

Попробуйте использовать DateTime.current - это даст зонированное время, если ваше приложение работает в одном.

Из документов:

Возвращает Time.zone.now.to_datetime, когда установлены Time.zone или config.time_zone, в противном случае возвращает Time.now.to_datetime.

По сути, Time.zone должен отражать DateTime.current, если вы работаете с часовым поясом, тогда как Time.now и DateTime.now будут игнорировать любую зону. Источник метода достаточно понятен:

def current
  ::Time.zone ? ::Time.zone.now.to_datetime : ::Time.now.to_datetime
end

Надеюсь, это поможет - напишите мне, если у вас есть какие-либо вопросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...