2010-02-25 21 views

Respuesta

8

No utilice Date.new. Use new Date(). Debido al formato de la cadena de fecha, recomendaría agarrando cada campo individual y pasarlos al constructor:

var startYear = parseInt(document.getElementById('startYear'), 10); 
var startMonth = parseInt(document.getElementById('startMonth'), 10) - 1; // as per Residuum's comment 
var startDay = parseInt(document.getElementById('startDay'), 10); 
var start = new Date(startYear, startMonth, startDay); 

etc. Si estás entregó una cadena de fecha, a continuación, puede utilizar el método de piruleta difusa para obtener cada campo de la cadena. Sin embargo, no estoy seguro si el constructor de fechas aceptará cadenas sin analizar para los campos individuales.

El, una vez que tenga las dos fechas desea comparar, simplemente comparar sus valores en milisegundos desde la época:

function isValid(start, end) { 
    return start.getTime() < end.getTime(); 
} 
+0

Meses están basadas en cero en Javascript, por lo que lo convierten en startMonth = parseInt (document.getElementById ('startMonth'), 10) - 1; – Residuum

+0

Whoops. ¡Gracias! –

+0

Ok, gracias especiales por el Mes - 1 observación .. De lo contrario, todas las fechas de diciembre fallarían =) –

2

Esto se puede hacer, si se sabe su fecha siempre será formateado de la misma manera dd/mm/aaaa

today = "23/02/1001"; 
dateComponents = today.split("/"); 
date = new Date(dateComponents[2], dateComponents[1] - 1, dateComponents[0]); 

pero una mejor solución es buscar en esta página hay Datejs que es una buena alternativa al procesamiento de datos.

+0

Los meses tienen base cero en Javascript, por lo que es fecha = nueva Fecha (fechaComponentes [2], fechaComponentes [1] - 1, dateComponents [0]); – Residuum

5

Hay una buena biblioteca de manejo de fechas llamada datejs que tiene un método parseExact(dateStr, format).

+0

¡Comprobaré esto, tnxs! –

1

Quick 'n sucia:

function is_valid (start , end) { 
    return start.split('/').reverse().join('') <= end.split('/').reverse().join('') ; 
} 

Es decir, dividir la fecha en componentes, invertir el orden de unirse a ellos de nuevo y hacer una comparación de cadenas.

Editar: Como se indica en el comentario, por supuesto, esto no funcionará si su mes/días más pequeños que 10 no tienen relleno de cero.

+0

La cadena de formato de fecha dd/mm/aaaa normalmente no supone relleno cero. Esto no funciona si los componentes de fecha no son siempre acolchados con cero. P. ej. '9/1/2010' y '10/1/2010 '. –

+0

si no tiene relleno, entonces no funcionará ... para mí, indicando dd en lugar de d y mm en lugar de m significa 2 dígitos, pero supongo que ese no es necesariamente el caso. – Pat

0

Éstos son todos los constructores disponibles para los objetos de fecha en Javascript:

dateobject = new Date(); // returns date of current time stamp 
         // on the browser 
dateobject = new Date("Month Day, Year Hours:Minutes:Seconds"); 
dateobject = new Date(Year, Month, Day); 
dateobject = new Date(Year, Month, Day, Hours, Minutes, Seconds); 
dateobject = new Date(Milliseconds); 

escoger el que intenta utilizar, pero me gustaría ir para new Date(Year, Month, Day); en su caso.

EDIT: Nota: Month es de base cero en Javascript, OE 1 enero de 2010, será new Date(2010, 0, 1) y 31 de diciembre 2011 es new Date(2010, 11, 31).

+0

La observación de este mes es muy útil, y JS es muy estúpido –

+0

Las cosas del mes son una rareza JS muy extraña, ya que hay algunas otras, pero si asimilas JS puede ser un lenguaje realmente agradable. – Residuum

Cuestiones relacionadas