time_select с 12-часовым временем и часовым поясом в Ruby on Rails - PullRequest
5 голосов
/ 22 октября 2010

У меня есть необходимость получить данные о времени и часовом поясе от пользователей приложения rails 2.3.8, но я не смог придумать чистого решения для создания и анализа выборок.

В идеале я хотел бы иметь выпадающие меню для:

  • час (1-12)
  • минута (0-59)
  • AM / PM
  • Часовой пояс

Есть ли гем / плагин, который выполняет то, что я ищу? Нужно ли хранить в базе данных как часовой пояс, так и часовой пояс? Какова лучшая стратегия для хранения?

В конечном итоге мне потребуется выложить эти значения в UTC, но пользователь должен иметь возможность вернуться и просмотреть время в правильном часовом поясе.

Ответы [ 2 ]

11 голосов
/ 22 октября 2010

Вы можете выбрать часовой пояс с помощью соответствующих методов:

Аналогично, date_select для дат.

Хранение:

Если часовой пояс специфичен для пользователя и не изменяется, сохраните его часовой пояс в пользовательской записи и установите его при загрузке current_user. Rails преобразует время в / из UTC и всегда хранит UTC в базе данных и сделает для вас автоматическое преобразование в часовой пояс по умолчанию (включая переход на летнее время!). Самый простой способ сделать это.

use_zone (zone) позволяет переопределить зону по умолчанию для блока, чтобы вы могли принять значение формы и установить его с помощью этой функции, а также установить свое значение в этом блоке.

ОБНОВЛЕНИЕ: я написал несколько примеров часовых поясов Rails в виде записи в блоге.

1 голос
/ 30 июля 2012

Я лично использовал jQuery только для изменения отображения:

 ampm = ["12 AM","01 AM","02 AM","03 AM","04 AM","05 AM","06 AM","07 AM","08 AM","09 AM","10 AM","11 AM","12 PM","01 PM","12 PM","01 PM","02 PM","01 PM","02 PM","03 PM","04 PM","05 PM","06 PM","07 PM","08 PM","09 PM","10 PM","11 PM"]
    j("#game_start_time_4i option").each(function(index,value){
        j(value).html(ampm[index]);
    });

Рельсы:

<%= datetime_select('game', 'start_time') %>
...