2012-05-11 12 views
15

Quando uso il metodo "getHour()" in javascript, visualizza il formato dell'ora militare. Ho bisogno di visualizzare l'ora in numeri tra 1-12 invece. Qualcuno può dirmi come fare questo? Ecco il codice che sto usando:Modifica da 1-24 ore a 1-12 ore per il metodo "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

quindi sottrarre 12 se maggiore di 13 :) – epascarello

risposta

29

Questo correggerà 13 - 24 torna alla gamma 1-12, e 0 torna alle 12:

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

Inoltre, è necessario smettere di ripetere se stessi nel tuo codice. Chiamata time.getHours() e time.getMinutes() e memorizzare i loro valori solo volta ciascuna, e poi preoccupare di aggiungere gli zeri iniziali, ad esempio:

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 per memoization. – jbabey

+1

@jbabey no, questo è solo il [Principio ASCIUTTO] (http://en.wikipedia.org/wiki/Don't_repeat_yourself). [Memoization] (http://en.wikipedia.org/wiki/Memoization) è la pratica di memorizzare nella cache i risultati restituiti in precedenza e restituire quelli invece di eseguire il lavoro per calcolarli nuovamente la volta successiva che vengono forniti gli stessi parametri. – Alnitak

+0

esatto, non stai calcolando di nuovo .getHours() o .getMinutes(). – 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; 
} 

Questa funzione darà il formato dell'ora perfetto in 1- 12 ore

+0

Perché stai formattando i minuti e i secondi? Penso che non sia necessario. – mejiamanuel57

+0

Solo un seguito: la formattazione di minuti e secondi è necessaria perché JS getMinutes e getSeconds restituiranno un singolo numero intero per il tempo. A differenza di 05, restituirà 5. –

27

Perché non farlo nel modo breve? Matematica, gente! :)

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

Questo è più efficace di altri ringraziamenti per questo –

+0

Questo è il modo in cui lo faccio sempre anch'io. – rfoo

+3

Dov'è la matematica! (X + n * 12)% 12 ==> X% 12 abbrevia la tua risposta a. function hours12 (date) {return date.getHours()% 12 || 12; } –

3

Altre risposte sono davvero molto buone. Ma penso che possano essere inclusi anche i seguenti.

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 
    } 

Vedere quello che ho fatto lì in arrayHrs;)

0

il modo più semplice per utilizzare questo.

setInterval(function() { 
 

 
var d = new Date(); 
 

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

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

Problemi correlati