2008-09-16 11 views
13

En JavaScript, ¿cuál es la mejor manera de determinar si una fecha provista cae dentro de un rango válido?Usando Javascript, ¿cómo me aseguro de que un rango de fechas sea válido?

Un ejemplo de esto podría ser comprobar si la entrada del usuario requestedDate es parte de la siguiente semana laboral válida. Tenga en cuenta que esto no es solo verificar si una fecha es más grande que otra ya que una fecha válida sería igual o mayor que el extremo inferior del rango mientras que es menor o igual al límite superior del rango.

Respuesta

15

Esto es realmente un problema que he visto aparecer mucho antes en mis trabajos y el siguiente fragmento de código es mi respuesta al problema.

// checkDateRange - Checks to ensure that the values entered are dates and 
//  are of a valid range. By this, the dates must be no more than the 
//  built-in number of days appart. 
function checkDateRange(start, end) { 
    // Parse the entries 
    var startDate = Date.parse(start); 
    var endDate = Date.parse(end); 
    // Make sure they are valid 
    if (isNaN(startDate)) { 
     alert("The start date provided is not valid, please enter a valid date."); 
     return false; 
    } 
    if (isNaN(endDate)) { 
     alert("The end date provided is not valid, please enter a valid date."); 
     return false; 
    } 
    // Check the date range, 86400000 is the number of milliseconds in one day 
    var difference = (endDate - startDate)/(86400000 * 7); 
    if (difference < 0) { 
     alert("The start date must come before the end date."); 
     return false; 
    } 
    if (difference <= 1) { 
     alert("The range must be at least seven days apart."); 
     return false; 
    } 
    return true; 
} 

Ahora, un par de cosas a tener en cuenta sobre este código, la función Date.parse debería funcionar para la mayoría de tipos de entrada, pero ha sido conocido por tener problemas con algunos formatos como "AAAA MM DD" por lo que debe probar que antes de usándolo Sin embargo, parece recordar que la mayoría de los navegadores interpretarán la cadena de fecha dada a Date.parse en función de la configuración regional de la computadora.

Además, el multiplicador para 86400000 debe ser el intervalo que desee. Entonces, si estás buscando fechas que estén separadas al menos una semana, entonces deberían ser siete.

+0

pls actualización fromat de inicio y fin checkDateRange (inicio, final) es muy difícil de chk – John

7

Así que si lo entiendo por el momento, debe ver si una fecha es más grande que la otra.

function ValidRange(date1,date2) 
{ 
    return date2.getTime() > date1.getTime(); 
} 

A continuación, deberá analizar las cadenas que está recibiendo desde la interfaz de usuario, con Date.parse, así:

ValidRange(Date.parse('10-10-2008'),Date.parse('11-11-2008')); 

ayuda eso?

+0

El problema no es tanto comprobar si una fecha es más grande que la otra, sino verificar si una fecha está dentro de un intervalo determinado fechas válidas. Por ejemplo, si el requisito empresarial es que una tarea se resuelva en los próximos siete días, entonces debe asegurarse de que la fecha programada sea inferior o igual a siete días a partir de la fecha actual. – rjzii

4
var myDate = new Date(2008, 9, 16); 

// is myDate between Sept 1 and Sept 30? 

var startDate = new Date(2008, 9, 1); 
var endDate = new Date(2008, 9, 30); 

if (startDate < myDate && myDate < endDate) { 
    alert('yes'); 
    // myDate is between startDate and endDate 
} 

Hay una variedad de formatos que puede pasar al constructor Date() para construir una fecha. También puede construir una nueva fecha con la hora actual:

var now = new Date(); 

y establecer diversas propiedades en él:

now.setYear(...); 
now.setMonth(...); 
// etc 

Ver http://www.javascriptkit.com/jsref/date.shtml o Google para más detalles.

Cuestiones relacionadas