2012-09-05 13 views
8

ho qualche script di orologio. Va tutto bene e funziona perfettamente ma ... ho un problema. Se all'orologio è impostata un'ora o un minuto di una cifra come l'orologio 1: 5, non si aggiunge prima la cifra "0". Questo è quello che ho fatto ma non funziona. Puoi aiutarmi, molto di più?Aggiungendo "0" se l'orologio ha una cifra

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

possibile duplicato di [String.Format in Javascript?] (Http://stackoverflow.com/questions/6220693/string-format-in-javascript) –

+0

non riesco a trovarlo ... – Lukas

+0

Il "problema" con questo codice è che 'number.length' (es.' (42) .length') è * sempre * 'indefinito'. –

risposta

13

currentMinutes è un numero, quindi non ha la proprietà length. Inoltre, è necessario controllare lo length prima di impostare lo currentMinutes sull'elemento minutes.

Qualcosa di simile:

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, funziona bene, molto per aiuto, chears – Lukas

8

currentMinutes non avrà una proprietà length, in quanto è un Number, non un String.

Si potrebbe forzare a essere un String.

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

Ma, perché avete una Number, si dovrebbe rendere la vostra condizione ...

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

Se tu fossi pazzo soprattutto, si potrebbe fare ...

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

o semplicemente 'if (currentMinutes <10) {' – xdazz

+1

@xdazz Continua a leggere :) – alex

+0

'if (currentMinutes <10) {' non funziona :( – Lukas

1

Si potrebbe anche verificare sprintf() per javascript.

si potrebbe andare con qualcosa di semplice come:

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

Utilizzando funzioni che accettano la formattazione ti permette di avere molto più controllo sulla vostra uscita, quando è necessario.

16

È possibile utilizzare .slice per estrarre una parte di una stringa. Passa un numero negativo, per tagliare dalla fine della stringa.

Pertanto, la seguente è possibile, e molto semplice:

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

Concatenating con '0' fa in modo che la destinazione dell'operazione sarà sempre una stringa. ('0'+currentMinutes) genererà una stringa di 2 o 3 lettere ("07" o "017", ad esempio). Tagliare gli ultimi due caratteri da quella stringa ti darà un numero a due cifre con 0 cifre.

Si noti che quanto sopra darebbe "00" se currentMinutes è 100, quindi si presume che si conoscono i valori con cui si lavorerà.

Questo potrebbe essere estratto a qualcosa di più riutilizzabile:

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

che permetterebbe di scrivere:

currentMinutes.zeroPad(); 

Si potrebbe anche fare la lunghezza della variabile padding:

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

Quale potrebbe essere chiamato come:

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

Si noti che mentre currentMinutes.zeroPad() funzionerà, 7.zeroPad() non lo farebbe.

+0

+1 Questo è incredibilmente conciso, lo adoro. –

0

in Android (build in)

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

in javascript uso (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 necessita di soluzione per ** JavaScript **, non per Android –

0

sulla base delle altre awnsers, ho creato questa riga di codice:

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 la prossima volta.

Problemi correlati