2012-02-29 21 views
6

La función devuelve la hora en formato de 24 horas.
¿Cómo convertir el tiempo del formato de 24 horas al formato de 12 horas usando javascript?

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

devuelve la hora en formato de 24 horas. Quiero que el tiempo se convierta en formato de 12 horas.
Anyhelp sería muy apreciado.
Gracias.

+1

¿Tan 'h' es solo un número entero entre 0 y 23? ¿Qué has intentado? –

+0

Si realiza una gran cantidad de análisis de fecha/hora, podría ser interesante consultar [Datejs] (http://www.datejs.com/). – flitig

Respuesta

13

Sólo tiene que utilizar el módulo 12:

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

Módulo (%) significa dividir y tomar resto. Por ejemplo, 17/12 = 1 con el resto 5. Entonces, el resultado del 17% 12 es 5. Y la hora 17 es la hora 5 en 12 horas.

Pero tenga en cuenta que esta función no está completa ya que no funciona para la hora 0 (o la hora 12). Para solucionarlo hay que añadir en otro cheque por que:

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

También tenga en cuenta que se puede añadir un meridiano con facilidad, por ver si la hora es de menos de 12 (am) o igual a/mayor (por la tarde) :

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

Nota: Todo lo anterior es suponiendo que el parámetro de esta función es un número entero entre 0 y 23.

+0

Muchas gracias por su ayuda. – saran

+0

Muchas gracias ... es clara como la respuesta – Dibish

2

Usted podría intentar algo como lo siguiente:

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

Esto no funciona bien para la medianoche o el mediodía. Mostrará "00:00 am" y "00:00 pm" para estos. Debería verificar si el valor es "0" y reemplazarlo con "12". –

+0

Después de 'h = h% 12;', 'h' nunca será'> = 12'. – Toto

+0

Gracias Ben Lee y M42, ambos están en lo correcto. He modificado el código para reflejar esto. –

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

Estoy bastante seguro de que esto funcionará como una versión fórmulas aún más concisa de la respuesta de Ben Lee, incluso para los h = 0 y h = 12 casos:

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

o la inclusión de la mañana/pm:

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