2011-07-23 11 views
6

Obtengo tres variables a través de una entrada de usuario, que contienen el año de una fecha, el mes y el día. Ya he comprobado si el mes var está entre 1-12 y así sucesivamente.Comprobar la fecha en JavaScript

Ahora quiero comprobar si es una fecha real y no una fecha que no existe como el 31-06-2011.

Mi primera idea era hacer una nueva instancia Fecha:

var year = 2011; 
var month = 5; // five because the months start with 0 in JavaScript - June 
var day = 31; 
var myDate = new Date(2011,5,31); 
console.log(myDate); 

Pero myDate no vuelve falsa, porque no es una fecha válida. En su lugar, devuelve 'Fri Jul 01 2011 [...]'.

¿Alguna idea de cómo puedo verificar una fecha no válida?

+0

¡Bienvenido a Stack Overflow, dotweb! Por favor, no coloque etiquetas en el título, ¡gracias! –

+0

¿Qué? No lo entiendo, lo siento. –

+0

Las etiquetas pertenecen a las etiquetas, [no en el título] (http://meta.stackexchange.com/questions/66152/titles-should-the-most-relevant-tag-be-included-in-the-title) . –

Respuesta

11

Prueba esto:

if ((myDate.getMonth()+1!=month)||(myDate.getDate()!=day)||(myDate.getFullYear()!=year)) 
    alert("Date Invalid."); 
+0

¡Gracias! buena idea. –

+0

Solo necesita verificar dos componentes, pero los tres no duelen. :-) – RobG

0

Usted podría hacer lo que hace ahora y construir un nuevo objeto Date y luego verificar posteriormente el valor de myDate.getFullYear(), myDate.getMonth(), myDate.getDate(), para garantizar que esos valores coincidan con los valores de entrada. Tenga en cuenta que getMonth() y getDate() son 0 indexados, por lo que enero es el mes 0 y diciembre es el mes 11.

He aquí un ejemplo:

function isValidDate(year, month, day) { 
    var d = new Date(year, month, day); 

    return d.getFullYear() === year && d.getMonth() === month && d.getDate() === day; 
} 

console.log(isValidDate(2011,5,31)); 
console.log(isValidDate(2011,5,30)); 
5
if ((myDate.getDate() != day) || 
    (myDate.getMonth() != month - 1) || 
    (myDate.getFullYear() != year)) 
{ 
    return false; 
} 

JavaScript simplemente convierte entró en Date constructor month, year, day, etc. en valor int simple (milisegundos) y luego lo formatea para representarlo en formato de cadena. Puede crear new Date(2011, 100, 100) y todo va bien :)

0

Creo que esta es la verdad.

function isValidDate(year, month, day) {  
     var d = new Date(year, month, day); 
     if(month == 12){ 
      year = parseInt(year)*1+1*1; 
      month = 0; 
     } 
     day = parseInt(day); 
     month = parseInt(month); 
     year = parseInt(year); 
     if(month === 2 && day > 29){ 
      return false; 
     } 
     return d.getFullYear() === year && d.getMonth() === month && d.getDate() === day; 
    } 
+1

¡Ehm, esto ya fue respondido hace más de medio año! Gracias de todos modos. –