2012-02-29 14 views
6

Funkcja zwraca czas w formacie 24-godzinnym.
Jak przekonwertować czas z formatu 24-godzinnego na format 12-godzinny przy użyciu javascript?

function fomartTimeShow(h) { 
    return h < 10 ? "0" + h + ":00" : h + ":00"; 
} 

zwraca czas w formacie 24-godzinnym. Chcę, aby czas był konwertowany w formacie 12-godzinnym.
Anyhelp byłby bardzo ceniony.
Dzięki.

+1

Więc 'h' jest po prostu liczbą całkowitą z przedziału od 0 do 23? Co próbujesz? –

+0

Jeśli wykonujesz wiele analizowania daty/czasu, może być ciekawie sprawdzić [Datejs] (http://www.datejs.com/). – flitig

Odpowiedz

13

Wystarczy użyć Modulus 12:

function formatTimeShow(h_24) { 
    var h = h_24 % 12; 
    return (h < 10 ? '0' : '') + h + ':00'; 
} 

Moduł (%) oznacza podzielić i brać resztę. Na przykład 17/12 = 1 z pozostałą 5. Więc wynik 17% 12 wynosi 5. A godzina 17 to godzina 5 w 12-godzinnym czasie.

Należy jednak pamiętać, że ta funkcja nie jest kompletna, ponieważ nie działa dla godziny 0 (lub godziny 12). Aby to naprawić trzeba dodać w innym czeku na to:

function formatTimeShow(h_24) { 
    var h = h_24 % 12; 
    if (h === 0) h = 12; 
    return (h < 10 ? '0' : '') + h + ':00'; 
} 

Należy również pamiętać, że można dodać południk łatwo, widząc, czy godziny jest mniejsza niż 12 (am) lub równa/większa (pm) :

function formatTimeShow(h_24) { 
    var h = h_24 % 12; 
    if (h === 0) h = 12; 
    return (h < 10 ? '0' : '') + h + ':00' + (h_24 < 12 ? 'am' : 'pm'); 
} 

Uwaga: Wszystkie powyższe jest przy założeniu, że parametr do tej funkcji jest liczbą całkowitą od 0 do 23.

+0

Bardzo dziękuję za pomoc. – saran

+0

Dziękuję bardzo ... za krystalicznie czystą odpowiedź – Dibish

2

można spróbować coś jak następuje:

function fomartTimeShow(h) { 
    var ampm = "am" 
    if (h >= 12) 
     ampm = "pm" 
    h = h % 12; 
    if (h == 0) 
    h = 12; 
    return h ":00" + ampm; 
} 
+0

To nie działa dobrze na północ lub południe. Wyświetli się "00:00 am" i "00:00 pm". Powinieneś sprawdzić, czy wartość wynosi "0" i zastąpić ją "12". –

+0

Po 'h = h% 12;', 'h' nigdy nie będzie'> = 12'. – Toto

+0

Dzięki Ben Lee i M42, obaj jesteście poprawni. Poprawiłem kod, który odzwierciedla to. –

1
function fomartTimeShow(h) { 
    var s = (h % 24 < 12) ? "am" : "pm", h = h % 12 || 12; 
    return (h < 10 ? "0" + h : h) + ":00" + " " + s; 
} 
0

Jestem całkiem pewien, że to będzie działać jako jeszcze bardziej zwięzły stereotypowe wersji odpowiedź Ben Lee, w tym dla H = 0 i H = 12 przypadkach:

function fomartTimeShow(h_24) { 
    var h = ((h_24 + 11) % 12)+1; 
    return (h < 10 ? '0' : '') + h + ':00'; 
} 

lub łącznie am/pm:

function fomartTimeShow(h_24) { 
    var h = ((h_24 + 11) % 12)+1; 
    return (h < 10 ? '0' : '') + h + ':00' + (h_24 < 12 ? 'am' : 'pm'); 
} 
Powiązane problemy