2012-03-22 14 views
5

Tengo un objeto Date de JavaScript igual a 00:30 y cuando se hace:Adición de 30 minutos hasta la fecha hace que se vuelva 30 minutos

date.setMinutes(date.getMinutes() + 30); 

hace que el objeto de fecha igual a 00:00.

¿Alguien sabe por qué sucede esto?

Aquí es donde se está utilizando el código:

for (var i = openTime; i <= closeTime; i.setMinutes(i.getMinutes() + timeIncrement)) { 
    var time = i.getHours() + (i.getHours() == 0 ? '0' : '') + ':' + i.getMinutes() + (i.getMinutes() == 3 || i.getMinutes() == 0 ? '0' : ''); 

    $(timeClientId).append($('<option />').val(time).text(time)); 
} 

La secuencia de comandos anterior crea una lista de horas disponibles desde las 10:00 am hasta el final a 02:00 am del día siguiente.

Funciona bien hasta que llega a la medianoche 00:00 después de muchas iteraciones exitosas.

¿Alguien puede ayudar?

Gracias!

Respuesta/Solución:

Este problema se debe a un problema de horario de verano, por lo que este sábado se adelantan los relojes. Por alguna extraña razón, al agregar 30 minutos a las 12:30, se reinicia a 12:00 utilizando .setMinutes(). Esto lo mantuvo en un ciclo sin fin. La solución fue agregar minutos usando i.setTime (i.getTime() + timeIncrement * 60 * 1000) Esto solucionó el problema.

¡Salud para todas sus respuestas!

Respuesta

5

Usted solo está estableciendo los minutos. Así que, por supuesto, 30 minutos + 30 minutos en el reloj equivalen a 60 minutos, es decir, 0 minutos.

Utilice este método inteligente (que es inteligente, ya que funciona con todos los vuelcos!):

function addMinutes(inDate, inMinutes) 
{ 
    var newdate = new Date(); 
    newdate.setTime(inDate.getTime() + inMinutes * 60000); 
    return newdate; 
} 

var date = new Date(); 

alert(addMinutes(date,-30));​ 
+0

Gracias por la respuesta. ¿Cómo mejorarías el tiempo en 30 minutos? – Base33

+0

Se agregó una muestra. – Karlth

+0

Gracias. Esto es correcto también – Base33

0

date.js tiene una buena manera de hacer esto:

new Date().add({ minutes: 30 }); 

o incluso más fluida:

new Date().add(30).minutes(); 
3

¿Cómo está iniciando su cita? setMinutes parece funcionar como se esperaba, por lo que tal vez haya un error en su valor inicial. Vea a continuación mi prueba rápida y sucia.

var date = new Date(0); 
document.write(date); 
document.write("<br>"); 
date.setMinutes(30); 
document.write(date); 
document.write("<br>"); 
date.setMinutes(date.getMinutes() + 30); 
document.write(date); 
document.write("<br>"); 

Salidas:

Thu Jan 1 00:00:00 UTC 1970 
Thu Jan 1 00:30:00 UTC 1970 
Thu Jan 1 01:00:00 UTC 1970 
+0

Esto es correcto. No sabía que esa fecha hizo una transferencia automática. – Karlth

0

Prueba esto:

var date = new Date(2013,2,31,1,59); 
document.write(date,"<br>"); 
date.setMinutes(date.getMinutes()+30); 
document.write(date,"<br>"); 
date.setMinutes(date.getMinutes() + 30); 
document.write(date,"<br>"); 
date.setMinutes(date.getMinutes() + 30); 
document.write(date,"<br>"); 

Sun Mar 31 2013 01:59:00 GMT+0100 (CET) 
Sun Mar 31 2013 01:29:00 GMT+0100 (CET) 
Sun Mar 31 2013 01:59:00 GMT+0100 (CET) 
Sun Mar 31 2013 01:29:00 GMT+0100 (CET) 

Así que, obviamente, el cambio a horario de verano en Alemania está causando este resultado. ¿Pero fue esto intencional? Ingresando 2013,2,31,2,59 da el mismo resultado, como si la hora 1-2 no existiera. no me parece correcto.

Cuestiones relacionadas