2012-05-11 15 views
15

Cuando uso el método "getHour()" en javascript, muestra el formato de hora militar. Necesito que muestre la hora en números entre 1-12 en su lugar. ¿Alguien puede decirme cómo hacer esto? Aquí está el código que estoy utilizando:Cambiar la hora 1-24 a 1-12 hora para el método "getHours()"

function updateclock() 
{ 

    var time = new Date(); 
    var todisplay = ''; 

    if (time.getHours() < 10) todisplay += time.getHours(); 
    else todisplay += time.getHours(); 

    if (time.getMinutes() < 10) todisplay += ':0' + time.getMinutes(); 
    else todisplay += ':' + time.getMinutes(); 

    document.getElementById("clock").innerHTML = todisplay; 
} 
+0

así restar 12 si es mayor que 13 :) – epascarello

Respuesta

29

Esto corregirá 13 - 24 de nuevo a la gama de 1 - 12, y 0 de nuevo a 12:

var hours = time.getHours(); 
if (hours > 12) { 
    hours -= 12; 
} else if (hours === 0) { 
    hours = 12; 
} 

Además, tiene que dejar de repetir siempre lo mismo en tu código Llaman time.getHours() y time.getMinutes() y almacenar sus valores solo una vez cada uno, y luego preocupación acerca de agregar los ceros a la izquierda, por ejemplo:

function updateclock() { 

    function pad(n) { 
     return (n < 10) ? '0' + n : n; 
    } 

    var time = new Date(); 
    var hours = time.getHours(); 
    var minutes = time.getMinutes(); 

    if (hours > 12) { 
     hours -= 12; 
    } else if (hours === 0) { 
     hours = 12; 
    } 

    var todisplay = pad(hours) + ':' + pad(minutes); 
    document.getElementById("clock").innerHTML = todisplay; 
} 
+0

1 para memoization. – jbabey

+1

@jbabey no, ese es solo el [Principio DRY] (http://en.wikipedia.org/wiki/Don't_repeat_yourself). [Memoization] (http://en.wikipedia.org/wiki/Memoization) es la práctica de almacenar en caché los resultados previamente devueltos y devolverlos en lugar de hacer el trabajo para calcularlos nuevamente la próxima vez que se proporcionen los mismos parámetros. – Alnitak

+0

a la derecha, no está calculando .getHours() o .getMinutes() nuevamente. – jbabey

8
function getClockTime(){ 
    var now = new Date(); 
    var hour = now.getHours(); 
    var minute = now.getMinutes(); 
    var second = now.getSeconds(); 
    var ap = "AM"; 
    if (hour > 11) { ap = "PM";    } 
    if (hour > 12) { hour = hour - 12;  } 
    if (hour == 0) { hour = 12;    } 
    if (hour < 10) { hour = "0" + hour; } 
    if (minute < 10) { minute = "0" + minute; } 
    if (second < 10) { second = "0" + second; } 
    var timeString = hour + ':' + minute + ':' + second + " " + ap; 
    return timeString; 
} 

Esta función permite obtener el formato de hora perfecta en 1- 12 horas

+0

¿Por qué está formateando los minutos y los segundos? Creo que no es necesario. – mejiamanuel57

+0

Solo un seguimiento: el formateo de minutos y segundos es necesario porque JS getMinutes y getSeconds devolverán un entero único por el tiempo. A diferencia de 05, devolverá 5. –

27

¿Por qué no hacerlo de manera breve? Matemáticas, gente! :)

// returns the hours number for a date, between 1 and 12 
function hours12(date) { return (date.getHours() + 24) % 12 || 12; } 
+3

Esto es más efectivo que otras gracias por este –

+0

Esta es la forma en que siempre lo hago también. – rfoo

+3

¿Dónde está la matemática? (X + n * 12)% 12 ==> X% 12 acorta tu respuesta a. función hours12 (date) {return date.getHours()% 12 || 12; } –

3

Otras respuestas son de hecho muy buena. Pero creo que también se puede incluir.

var d = new Date(); 
var hour = d.getHours(); 
var minute = d.getMinutes(); 
var fulltime = ""; 

// create a 24 elements(0-23) array containing following values 
const arrayHrs = [12,1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,9,10,11]; 

    // since getMinutes() returns 0 to 9 for upto 9 minutes, not 00 to 09, we can do this 
    if(minute < 10) { 
     minute = "0" + minute; 
    } 

    if(hour < 12) { 
     // Just for an example, if hour = 11 and minute = 29 
     fulltime = arrayHrs[hour] + ":" + minute + " AM"; // fulltime = 11:29 AM 
    } 
    else { 
     // similarly, if hour = 22 and minute = 8 
     fulltime = arrayHrs[hour] + ":" + minute + " PM"; // fulltime = 10:08 PM 
    } 

Véase lo que hice allí en arrayHrs;)

0

el camino fácil de utilizar este.

setInterval(function() { 
 

 
var d = new Date(); 
 

 
document.getElementById("demo").innerHTML = 
 
d.getHours() % 12+" : "+d.getMinutes()+" : "+d.getSeconds(); 
 

 
}, 1000);
<p id="demo" ></p>