2010-10-22 1 views
5

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

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

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

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

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

+0

ли вы когда-нибудь понять, как сделать 12 часов с AM/PM выберите элемент? – Andrew

+0

IIRC, был 12-часовой патч обезьяны времени. Не самое чистое решение, но оно работало в мои крайние сроки. – jessecurry

ответ

11

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

Кроме того, есть date_select дат.

Хранение:

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

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

ОБНОВЛЕНИЕ: Я написал Rails timezone examples в качестве записи в блоге.

+0

Я видел методы для создания селектора часовых поясов, но этот селектор не привязан к объекту Time. Является ли это обязательным для меня что-то, что мне нужно сделать самому? – jessecurry

+0

Часовой пояс не привязан к объекту Time. Предположительно, вы используете 'form_for @ thing' в том, что вы пытаетесь захватить дату/время/зону. – wesgarrison

1

Я лично использовал 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]); 
    }); 

Rails:

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