2013-08-01 10 views
8

To jest naprawdę proste pytanie, które prawdopodobnie zostało już zadane i udzielono odpowiedzi, ale nie udało mi się znaleźć niczego.Szyny 12-godzinny zakres AM/PM na dzień

W każdym razie potrzebuję zakres/tablica przez 12 godzin, więc jak 12AM - 11AM, 12PM - 11PM. Zapewne rozumiesz o tym. Obecnie próbuję wykonać absurdalnie skomplikowaną metodę polegającą na odwzorowaniu AM na jednej macierzy, PM na inną, a następnie połączeniu obu macierzy. Musi być łatwiejszy sposób na zrobienie tego.

Wiem o Railsach time_select, ale potrzebuję innego formatu niż to, co zapewnia. Jakieś sugestie?

Wyjaśnienie: To, czego szukam, to 12-hour clock z AM i PM. Gdybym chciał mieć 24-godzinny zegar, mógłbym po prostu zrobić (0..24) i zakończyć. Ale 12-godzinny zegar trwa od 12 do 11, a następnie od 12 do 11 PM. Jestem prawie pewien, że ktoś to zrobił wcześniej.

+0

Właściwie to nie rozumiem. :-) Podane przykłady są oddalone o 23 godziny, jeśli założymy, że drugi raz w parze jest następny dzień. Co masz na myśli przez "12 godzinny czas"? Powiedziałeś również, że chcesz, aby twój wyglądał jak "HH: 00", ale ten format nie pasuje do twoich wcześniejszych dwóch przykładów. Szukasz tylko wyniku ciągu? Szukasz konstruktu "zasięgu"? Szukasz dwóch obiektów przypominających czasy w Ruby lub Railsach, jeden na początek i na koniec? Gdybyś mógł podać przykład "wejścia" i "wyjścia", które chciałbyś zobaczyć, pomogłoby to. –

+0

http://apidock.com/ruby/Time/strftime => exemples => "% r - czas 12-godzinny (% I:% M:% S% p)"; w mojej konsoli irb: 'Time.now.strftime ("% r ") # =>" 01:37:01 PM "' – MrYoshiji

+0

@MrYoshiji Nie szukam aktualnego czasu.Szukam tablicy wszystkich godzin dziennie, w formacie 12-godzinnym (https://en.wikipedia.org/wiki/12-hour_clock) – irosenb

Odpowiedz

16

Zgadzam się z @ komentarz MrYoshi, w najprostszy sposób formatowania daty jest .strftime(), zobaczyć RubyDoc dla wszystkich możliwych opcji

Przykład:

Time.now.strftime("%I:%M %p") 

wyjściowa: HH: MM AM

Lub o co prosiłeś dosłownie:

Time.now.strftime("%I:00") 

wyjściowa: GG: time_select Przypuszczam 00

Jak wspomniano chcesz zaoferować czas jako użytkownik zakresie selekcji, więc wypróbuj te opcje time_select (more options):

time_select 'game', 'game_time', {:minute_step => 60, :ampm => true} 

również ten poprzednie pytanie: Time select form helper with 12 hour format for Rails 3?

6

Rails ma to wbudowane w

<%= f.time_select :start, {ampm: true} %> 

http://api.rubyonrails.org/classes/ActionView/Helpers/DateHelper.html#method-i-time_select

+0

Nie ma dla mnie żadnego sensu, dlaczego byłby to 03: PM/15. To nie jest standard - przynajmniej nie w USA. Czy tak się dzieje w innych krajach? Spodziewałbym się, że będzie to 3/15/PM, w 3 wybranych polach - jak robi to każda normalna strona internetowa? Wiem, że nie jesteś tym, który pisze kod Rails, ale to naprawdę nie rozwiązuje go dla mnie. – gregblass

+0

Założę się, że istnieje taka konfiguracja lub jest ona oparta na locale. Nie sądzę, żeby to było dla mnie jak 03: PM/15. wygląda na zepsuty. Nie jestem dzisiaj w aplikacji railsowej lub chciałbym sprawdzić, przepraszam @GregBlass – Will

+0

Pytanie (edytowane 1 sierpnia 2013 r.) Dosłownie mówi "Wiem o Rails time_select, ale potrzebuję innego formatu niż to, co zapewnia." więc, chociaż interesujący, twój nie jest szukaną odpowiedzią. –

3

wiem, że to już odpowiedział jakiś czas temu z wbudowaną ale potrzebowałem niestandardową funkcję, aby uzyskać te wartości i napisał tak:.

times = {"12 AM" => 0}.merge!(1.upto(11).collect { |n| {"#{n} AM" => n} }.reduce(Hash.new, :merge)).merge!({"12 PM" => 12}).merge!(1.upto(11).collect { |n| {"#{n} PM" => n + 12} }.reduce(Hash.new, :merge)) 

Daje:

{"12 AM"=>0, "1 AM"=>1, "2 AM"=>2, "3 AM"=>3, "4 AM"=>4, "5 AM"=>5, "6 AM"=>6, "7 AM"=>7, "8 AM"=>8, "9 AM"=>9, "10 AM"=>10, "11 AM"=>11, "12 PM"=>12, "1 PM"=>13, "2 PM"=>14, "3 PM"=>15, "4 PM"=>16, "5 PM"=>17, "6 PM"=>18, "7 PM"=>19, "8 PM"=>20, "9 PM"=>21, "10 PM"=>22, "11 PM"=>23}