Я использую гем local_time для отображения дат по местному времени пользователей, и он хорошо работает для уже добавленных дат, чтобы отображать их по моему местному времени.
У меня возникла проблема с добавлением новой даты, и я пытаюсь передать локальное время пользователей (и, следовательно, дату) через форму HTML. Я полагаю, что клиентское устройство имеет свое местное время, поэтому мне нужно его захватить.
Сейчас я пытаюсь добавить поле в свою форму, например:
= simple_form_for(@link)do |f|
...
= f.text_field :local_client_time, value: local_time("#{Time.now()}")
но это отображается
August 11, 2014 12:12pm" />
который не только искажен и фактически показывает (должен быть скрыт), но также показывает время UTC, на 5 часов опережая время моего браузера, которое находится на EST.
Как я могу передать локальное время пользователей в форме? (вероятно, js)?
Я также не уверен, как обработать его на контроллере. в настоящее время у меня есть
@link = Link.new(params[:link])
и еще несколько логик после этого. Я не уверен, как позволить rails обрабатывать этот дополнительный параметр при создании экземпляра Active Record (будет ли он игнорировать его?), и я также не уверен, как затем использовать local_client_time, который был передан через скрытое поле, как в формат даты, который рельсы могут использовать для фактической установки значения поля даты verified_date
Примечание. Мне нужно будет отобразить поле для всех пользователей, независимо от того, вошли они в систему или нет, но с гемом local_time это нормально. Единственная проблема, по-видимому, связана с добавлением поля даты, которое имеет компонент времени. После 20:00 по восточному поясному времени он добавляется как следующий день, а затем это отображается на дисплее. Другое поле («content_date») не имеет этих проблем, но для этого поля я просто использую f.text_field :content_date, id: 'datepicker', size: 10
и не использую специальную обработку в контроллере и поле даты в базе данных.
Оба поля даты выглядят одинаково:
| content_date | date | YES | | NULL | |
| verified_date | date | YES | | NULL | |
Мне также интересно, должно ли поле проверенной даты на самом деле быть датой и временем, чтобы обойти это. Дело в том, что я не забочусь о компоненте времени и никогда не использую и не отображаю его. Самый низкий уровень детализации в приложении для полей даты и времени — 1 день.
"#{Time.now()}"
дает вам серверное время, а не клиентское время... - person Uri Agassi   schedule 11.08.2014