2012-09-05 13 views
8

tengo un script de reloj. Todo está bien y funciona a la perfección, pero ... tengo un problema. Si en el reloj se establece un dígito por hora o minuto, como 1: 5, el reloj no agrega el dígito "0" antes. Esto es lo que hice pero no funciona. ¿Puedes ayudarme, mucho?Añadiendo "0" si el reloj tiene un dígito

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

posible duplicado de [String.Format en Javascript?] (Http://stackoverflow.com/questions/6220693/string-format-in-javascript) –

+0

no puedo encontrarlo ... – Lukas

+0

El "problema" con este código es que 'number.length' (por ejemplo' (42) .length') es * siempre * 'undefined'. –

Respuesta

13

currentMinutes es un número, por lo que no tiene la propiedad length. Además, debe verificar el length antes de configurar el currentMinutes en el elemento minutes.

Algo así como:

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

bien, está bien, mucho más ayuda, chears – Lukas

8

currentMinutes no va a tener una propiedad length, ya que es un Number, no un String.

Podría forzarlo a ser String.

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

Pero, porque tiene una Number, usted debe hacer su condición ...

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

Si se va todo loco, que podría hacer ...

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

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

+1

@xdazz Seguir leyendo :) – alex

+0

'if (currentMinutes <10) {' not working :( – Lukas

1

También puede comprobar sprintf() JavaScript.

usted podría ir con algo tan simple como:

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

Uso de las funciones que aceptan el formato le permite tener más control sobre su producción, cuando es necesario.

16

Puede usar .slice para extraer una parte de una cadena. Pasele un número negativo, para cortar desde el final de la cadena.

Por lo tanto, la siguiente es posible, y bastante simple:

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

concatenar con '0' se asegura de que el objetivo de la operación siempre será una cadena. ('0'+currentMinutes) producirá una cadena de 2 o 3 letras ("07" o "017", por ejemplo). Cortar los dos últimos caracteres de esa cuerda te dará un número de dos dígitos con acolchado.

Tenga en cuenta que lo anterior arrojaría "00" si currentMinutes es 100, por lo que se supone que usted conoce los valores con los que estará trabajando.

Esto podría ser extraído a algo más reutilizables:

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

Eso le permitirá escribir:

currentMinutes.zeroPad(); 

También podría hacer que la longitud de la variable de relleno:

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

que se podría llamar como:

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

Tenga en cuenta que aunque currentMinutes.zeroPad() funcionará, 7.zeroPad() no.

+0

+1 Esto es increíblemente conciso, me encanta. –

0

en Android (construido en)

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

en 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 necesita una solución para ** JavaScript **, no para Android –

0

Basado en los otros awnsers, creé estas líneas de código:

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 próxima vez.

Cuestiones relacionadas