2012-03-08 10 views

Respuesta

2

Gracias a todos! No encontré ninguno de los anteriores para que funcione, pero finalmente funcionó. Tuve que hackear un poco;)

Lo hice dividiendo la fecha usando getMonth, getDate y getYear y analizándolo y luego comparándolo. Funciona exactamente como yo quiero:

Date.parse(document.getElementById("DateId").value) < Date.parse(dateToday.getMonth() + "/" + dateToday.getDate() + "/" + dateToday.getYear()) 
1

Mira las Date object docs.

Necesita un objeto Date con la fecha ingresada (usando el constructor o los métodos setMonth etc.) y uno con la fecha actual (no hay argumentos para el constructor). A continuación, puede usar getTime para obtener marcas de tiempo de UNIX en ambos objetos y compararlos.

0

Eche un vistazo a http://www.datejs.com/. Le ayudará con la manipulación de fecha estándar

+0

Datejs es excesivo para la comparación simple de fechas, especialmente cuando la fecha está en un formato conocido. Simplemente no vale la pena incluir * otra * biblioteca. Me ha parecido más una aplicación de juguetes: impresionante al principio, pero al probar algunas representaciones de fechas en el lenguaje natural del mundo real, no es lo suficientemente sólida. Por ejemplo, "diez en punto", "6 esta tarde", "dos días a partir de hoy". No se ha actualizado desde 2007, por lo que no hay muchas esperanzas de que se agregue esa solidez. – gilly3

+0

Bueno, entiendo lo que quieres decir, pero hacer cosas de fecha en JavaScript puede tomar mucho tiempo si quieres hacerlo bien. Creo que usar una biblioteca externa vale los costos adicionales, pero estoy de acuerdo en que tiene que ser mantenida y estable. Personalmente, no he trabajado mucho con datejs, así que solo puedo asumir que tienes razón. Construir este tipo de cosas usted mismo es contraproducente y todo código nuevo contiene errores, por lo que siempre trato de reutilizar las cosas ya existentes y probadas. – koenpeters

3

Convierta la cadena a una fecha usando new Date(dateString). Luego normalice la fecha de hoy para omitir información de tiempo usando today.setHours(0, 0, 0, 0). A continuación, sólo se puede comparar las fechas ya que tienes arriba:

var date = new Date(dateInput); 
if (isNaN(date)) { 
    alert("please enter a date"); 
} 
else { 
    var today = new Date(); 
    today.setHours(0, 0, 0, 0); 
    date.setHours(0, 0, 0, 0); 
    var dateTense = "present"; 
    if (date < today) { 
     dateTense = "past"; 
    } 
    else if (date > today) { 
     dateTense = "future"; 
    } 
    alert("You entered a " + dateTense + " date"); 
} 

Demostración:http://jsfiddle.net/w2sJd/

+0

Esto funcionó para mí. –

-3
function compareDate(inputDateString) { 
    var inputDate, now; 
    inputDate = new Date(inputDateString); 
    now = new Date(); 
    if (inputDate < now) { 
    console.log("You entered past date"); 
    } 
    else if (inputDate > now) { 
    console.log("You entered future date"); 
    } 
    else if (inputDate === now) { 
    console.log("You entered present date"); 
    } 
    else { 
    console.log("please enter a date"); 
    } 
} 
+3

Esto no funcionará para la fecha de hoy por dos razones. En primer lugar, está comparando por referencia en lugar de por valor. 'inputDate' no hace referencia al mismo objeto Date como' now', aunque sus valores pueden ser iguales. En segundo lugar, una Fecha creada al analizar 'MM/dd/aaaa' tendrá horas, minutos, segundos y ms todos iguales a '0', mientras que' nueva Fecha() 'contendrá información de tiempo (excepto 1 ms por día) . – gilly3

Cuestiones relacionadas