JavaScript - Compara dos marcas de tiempo

Intento comparar dos marcas de tiempo como esta:

var nowDate = new Date();
var givenDate = new Date(parseInt(year), parseInt(month), parseInt(day), parseInt(hour), parseInt(minute), 0);
var nd_timestamp = nowDate.getTime();
var gd_timestamp = givenDate.getTime();

if (nd_timestamp > gd_timestamp) {
    alert("yes");   
}

Pero no está funcionando correctamente. Si observo nd_timestamp y gd_timestamp, todo se ve bien, pero la cláusula if no funciona. Si elimino parseInt(año)... e ingreso Fecha(2012, 04, 20, 0, 0, 0) la cláusula if está funcionando.

Las variables año, mes, etc. vienen a través de una función, pero si lo depuro con alerta (año), etc., todo está bien. La fecha dada a través del formulario es más pequeña que la fecha real.

¿Alguien sabe por qué no funciona con variables?

¡Gracias!

preguntado el 30 de junio de 12 a las 15:06

Usted sabe que los objetos de fecha de JavaScript esperan un valor de mes de 0 a 11, y no de 1 a 12, ¿verdad? -

También sus llamadas parseint deberían verse como parseInt(month, 10) - si no haces eso, obtendrás resultados extraños de "08" y "09". -

Hola gracias. Ahora uso parseInt (var, 10) y para el mes que hago: parseInt (mes-1,10). Eso parece ser correcto. -

Debería ser parseInt(month, 10) - 1, aunque si el mes es realmente un número válido solo month - 1 debería funcionar: JavaScript convertirá la cadena en un número debido a la - operador por lo que la llamada a parseInt() en ese caso es superfluo. Por supuesto, es posible que desee verificar la validez de esos valores de campo. -

No necesita usar parseInt, las cadenas están bien. Y month - 1 devolverá un Número siempre que el mes sea una cadena que se convierta en un número. por ejemplo, dado y='2012', m='06', d='05' luego new Date(y,--m,d) devolverá la fecha correcta. -

2 Respuestas

Debe verificar los valores que le pasa al Date constructor para la validez, que incluye explícitamente especificando 10 como el segundo parámetro para todos sus parseInt llamadas para evitar sorpresas desagradables.

Con respecto al segundo parámetro, la documentación dice

Si bien este parámetro es opcional, especifíquelo siempre para eliminar la confusión del lector y garantizar un comportamiento predecible. Diferentes implementaciones producen diferentes resultados cuando no se especifica una raíz.

Respondido el 30 de junio de 12 a las 15:06

Tienes que tomar 1 de Mes porque por alguna razón está basado en cero, a diferencia de los demás.

Respondido el 30 de junio de 12 a las 15:06

Esos meses indexados a cero son tan malos, aquí está el por qué: stackoverflow.com/questions/2552483/… - christophe roussy

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.