2012-09-05 7 views
8

Ich habe einige Uhr Skript. Alles ist in Ordnung und es funktioniert perfekt, aber ... Ich habe ein Problem. Wenn an der Uhr eine einstellige Stunde oder Minute wie 1: 5 Uhr eingestellt ist, wird vorher keine "0" Ziffer hinzugefügt. Das was ich getan habe, aber es funktioniert nicht. Kannst du mir helfen, viel thx?Hinzufügen von "0" wenn Uhr eine Ziffer

window.setInterval(function update_clock() { 
    var currentTime = new Date(); 
    var currentHours = currentTime.getHours(); 
    var currentMinutes = currentTime.getMinutes(); 
    $.ajax({ 
     success: function (clock) { 
      document.getElementById("hour").firstChild.nodeValue = currentHours; 
      document.getElementById("minutes").firstChild.nodeValue = currentMinutes; 
      if (currentMinutes.length == 1) { 
       currentMinutes = "0" + currentMinutes; 
      } 
     } 
    }); 
}, 999); 
+2

möglich duplicate von [String.Format in Javascript?] (Http://stackoverflow.com/questions/6220693/string-format-in-javascript) –

+0

ich kann es nicht finden ... – Lukas

+0

Das "Problem" mit diesem code ist das 'number.length' (zB' (42) .length') * immer * 'undefined'. –

Antwort

13

currentMinutes ist eine Nummer, also hat sie nicht die length Eigenschaft. Außerdem müssen Sie die length vor dem Setzen der currentMinutes auf die minutes Element überprüfen.

Etwas wie:

var currentHours = currentTime.getHours(); 
var currentMinutes = currentTime.getMinutes(); 

$.ajax({ 
    success: function (clock) { 
     if (currentMinutes.toString().length == 1) { 
      currentMinutes = "0" + currentMinutes; 
     } 

     document.getElementById("hour").firstChild.nodeValue = currentHours; 
     document.getElementById("minutes").firstChild.nodeValue = currentMinutes; 
    } 
}); 
+1

ok, es funktioniert gut, viel thx für Hilfe, chears – Lukas

8

currentMinutes keinen length Eigenschaft haben, da es ein Number ist, kein String.

Sie könnten es zwingen, ein String zu sein.

if ((currentMinutes+'').length == 1) { 
    currentMinutes = "0" + currentMinutes; 
} 

Aber, weil Sie einen Number haben, sollten Sie Ihren Zustand machen ...

if (currentMinutes < 10) { 
    currentMinutes = "0" + currentMinutes; 
} 

Wenn Sie besonders verrückt waren, könnten Sie tun ...

var hoursMinutes = ((new Date)+"").match(/\d+:\d+(?=:)/)[0].split(":"); 
+0

oder nur 'if (currentMinutes <10) {' – xdazz

+1

@xdazz Lesen Sie weiter :) – alex

+0

'if (currentMinutes <10) {' funktioniert nicht :( – Lukas

1

Sie auch sprintf() für Javascript überprüfen können.

könnten Sie mit etwas gehen so einfach wie:

sprintf("%02d:%02d", currentHours, currentMinutes); 

mit Hilfe von Funktionen, die Formatierung übernehmen können Sie viel mehr Kontrolle über die Ausgabe haben, wenn Sie benötigen.

16

Sie können .slice verwenden, um einen Teil einer Zeichenfolge zu extrahieren. Übergeben Sie eine negative Zahl, um vom Ende der Zeichenfolge zu schneiden.

Daher ist die folgende möglich und ganz einfach:

('0'+currentMinutes).slice(-2) 

verketten mit '0' sorgt dafür, dass das Ziel der Operation wird immer ein String sein. ('0'+currentMinutes) ergibt eine 2- oder 3-stellige Zeichenfolge (z. B. "07" oder "017"). Wenn Sie die letzten beiden Zeichen von dieser Zeichenfolge trennen, erhalten Sie eine zweistellige Zahl mit zwei Ziffern.

Beachten Sie, dass das obige "00" ergeben würde, wenn currentMinutes100 ist, also nimmt es an, dass Sie die Werte kennen, mit denen Sie arbeiten werden.

Number.prototype.zeroPad = function() { 
    return ('0'+this).slice(-2); 
}; 

, die Sie schreiben, würde es ermöglichen:

Dies könnte zu etwas mehr wiederverwendbar extrahiert werden

Number.prototype.zeroPad = function(length) { 
    length = length || 2; // defaults to 2 if no parameter is passed 
    return (new Array(length).join('0')+this).slice(length*-1); 
}; 
:

currentMinutes.zeroPad(); 

Sie auch die Länge der Polsterung variabel machen könnte

Welches könnte als aufgerufen werden:

currentMinutes.zeroPad(); // e.g. "07" or "17" 
currentMinutes.zeroPad(3); // e.g. "007" or "017" 

Beachten Sie, dass während currentMinutes.zeroPad() funktioniert, würde 7.zeroPad() nicht.

+0

+1 Das ist unglaublich kurz, liebe es –

0

in Android (build in)

String time=String.format("%02d:%02d",hourOfDay,minute); 

in JavaScript Gebrauch (sprintf.js)

int i = 1; 
string s = sprintf("%02d", i); 
document.write(s); // Prints "01" 

sprintf.js: http://www.diveintojavascript.com/projects/javascript-sprintf

+0

OP benötigt Lösung für ** JavaScript **, nicht Android –

0

basierend auf den anderen awnsers, habe ich Diese Codezeilen:

var now = new Date(); 
 
var dd = now.getDate(); 
 
var mm = now.getMonth()+1; 
 
var y = now.getFullYear(); 
 
var h = now.getHours(); 
 
var m = now.getMinutes(); 
 

 
function aZero(n) { 
 
    return n.toString().length == 1 ? n = '0' + n: n; 
 
} 
 

 
document.getElementById("out").innerHTML = 
 
    aZero(dd) + "-" + 
 
      aZero(mm) + "-" + 
 
      y + " - " + 
 
      aZero(h) + ":" + 
 
      aZero(m);
<div id="out">my time :D</div>

Cu beim nächsten Mal.

Verwandte Themen