Time.now.midnight восприимчивость к часовым поясам - PullRequest
4 голосов
/ 29 марта 2011

У меня есть несколько ежедневных записей в стиле аналитики, которые отслеживают использование на моем сайте, и они работают следующим образом:

  • Когда происходит событие, сайт ищет запись, созданную в Time.now.midnight.
  • Если такая запись не найдена, создается новая, и для created_at устанавливается значение Time.now.midnight.

Вот вопрос - записывается ли Time.now.midnight по-разному в зависимости от часового пояса клиента? Если да, то правильно ли я предположить, что приведенная выше очень простая система сломается?

Как это исправить, чтобы все аналитические записи, независимо от часового пояса пользователя, который инициировал их создание, были привязаны к одному разу?

Примечание: я полагаю, что установка поля created_at в Date вместо Datetime могла бы быть лучше в этом сценарии. Давайте предположим, что мы застряли с датой и временем для этого вопроса.

1 Ответ

2 голосов
/ 29 марта 2011

Time.now не записывается по-разному в зависимости от часового пояса клиента.

Time.now возвращает новое время, используя системный часовой пояс (он же сервер)

Чтобы использовать определенный часовой пояс клиента, пользователь должен выбрать его зону и использовать Time.current или Time.zone.now (которые делают то же самое)

create_at обычно прикреплен к UTC, поэтому у вас не должно быть никаких проблем с ними. (чтобы изменить это, вам нужно изменить Rails.root / config / application.rb)

config.time_zone = "whatever you want the ActiveRecord default to be"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...