2012-05-11 7 views
15

Wenn ich die Methode "getHour()" in Javascript verwende, zeigt es das militärische Zeitformat an. Ich brauche es, um die Stunde in Zahlen zwischen 1-12 stattdessen anzuzeigen. Kann mir jemand sagen, wie ich das mache? Hier ist der Code ich verwende:Ändern der 1-24 Stunde zu 1-12 Stunde für die "getHours()" Methode

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

subtrahieren so 12, wenn mehr als 13 :) – epascarello

Antwort

29

Dies korrigiert 13-24 zurück auf den Bereich von 1 bis 12 und 0 zurück bis 12:

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

Außerdem müssen Sie sich zu wiederholen stoppen in deinem Code. Rufen Sie time.getHours() und time.getMinutes() und speichern ihre Werte nur einmal jede und dann Sorge um die führenden Nullen hinzufügen, zB:

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 für memoization. – jbabey

+1

@jbabey nein, das ist nur das [DRY-Prinzip] (http://en.wikipedia.org/wiki/Don't_repeat_yourself). [Memoization] (http://en.wikipedia.org/wiki/Memoization) ist die Praxis, zuvor zurückgegebene Ergebnisse zwischenzuspeichern und diese zurückzugeben, anstatt die Arbeit zu tun, um sie beim nächsten Mal, wenn dieselben Parameter geliefert werden, erneut zu berechnen. – Alnitak

+0

Richtig, Sie berechnen .getHours() oder .getMinutes() nicht erneut. – 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; 
} 

Diese Funktion wird das perfekte Zeitformat in 1- geben 12 Stunden

+0

Warum formatierst du die Minuten und Sekunden? Ich denke, ist nicht notwendig. – mejiamanuel57

+0

Nur ein Follow-up - die Formatierung von Minuten und Sekunden ist notwendig, da JS getMinutes und getSeconds eine ganze Zahl für die Zeit zurückgeben. Im Gegensatz zu 05, wird es 5 zurückgeben. –

27

Warum nicht den kurzen Weg? Mathe, Leute! :)

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

Dies ist effektiver als andere Dank dafür –

+0

Dies ist die Art, wie ich es immer tun. – rfoo

+3

Wo ist die Mathematik! (X + n * 12)% 12 ==> X% 12 verkürze deine Antwort auf. Funktion Stunden12 (Datum) {return date.getHours()% 12 || 12; } –

3

Andere Antworten sind in der Tat sehr gut. Aber ich denke, folgende können auch enthalten sein.

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 
    } 

Sehen Sie, was ich in arrayHrs es tat;)

0

die einfache Möglichkeit, dies zu nutzen.

setInterval(function() { 
 

 
var d = new Date(); 
 

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

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