2010-10-22 13 views
5

Potrzebuję uchwycić strefę czasową i czasową od użytkowników aplikacji szynowej 2.3.8, ale nie potrafię wymyślić czystego rozwiązania do tworzenia i analizowania wybory.time_select z 12-godzinnym czasem i strefą czasową w Ruby on Rails

Idealnie byłoby mam menu rozwijanych dla następujących elementów:

  • godzinnym (1-12)
  • minut (0-59)
  • AM/PM
  • Time Zone

Czy istnieje gem/plugin, który spełnia to, czego szukam? Czy muszę przechowywać zarówno czas, jak i strefę czasową w bazie danych? Jaka jest najlepsza strategia przechowywania?

Będę musiał wypluć te wartości w UTC, ale użytkownik powinien móc wrócić i sprawdzić czas w odpowiedniej strefie czasowej.

+0

Czy kiedykolwiek dowiedzieć się, jak to zrobić z 12-godzinnym AM/PM wybierz elementu? – Andrew

+0

IIRC, było 12-godzinna łata małp. Nie najczystsze rozwiązanie, ale działało w moim ostatecznym terminie. – jessecurry

Odpowiedz

11

można uzyskać strefę czasową wybiera z odpowiednimi metodami:

Podobnie, istnieje date_select dat.

Przechowywanie:

Jeśli strefa czasowa jest specyficzne dla użytkownika i nie zmienia się, a następnie przechowywanie ich w ich strefę czasową rekordu użytkownika i ustawić go podczas ładowania current_user. Railsy konwertują czasy do/z UTC i zawsze przechowują UTC w bazie danych i wykonują automatyczną konwersję do tej domyślnej strefy czasowej (włączając w to zmianę czasu letniego!). Najprostszy sposób to zrobić.

use_zone(zone) pozwala zastąpić domyślną strefę dla bloku, więc można zaakceptować wartość formularza i ustawić ją za pomocą tej funkcji i ustawić wartość w tym bloku.

AKTUALIZACJA: Napisałem około Rails timezone examples jako wpis na blogu.

+0

Widziałem metody tworzenia selektora strefy czasowej, ale ten selektor nie jest związany z obiektem czasu. Czy to wiąże coś, co sam będę musiał zrobić? – jessecurry

+0

Strefa czasowa nie będzie związana z obiektem czasu. Prawdopodobnie używasz 'form_for @ thing' na rzeczy, która próbujesz uchwycić datę/czas/strefę. – wesgarrison

1

Osobiście używany jQuery zmienić tylko wyświetlacz:

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]); 
    }); 

szyn:

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