Pregunta

En JavaScript, ¿cuál es la mejor manera de determinar si una fecha proporcionada se encuentra dentro de un rango válido?

Un ejemplo de esto podría ser comprobar si la entrada del usuario requestedDate es parte de la próxima semana laboral válida.Tenga en cuenta que esto no es solo verificar si una fecha es mayor que otra, ya que una fecha válida sería igual o mayor que el extremo inferior del rango y menor o igual que el extremo superior del rango.

¿Fue útil?

Solución

En realidad, este es un problema que he visto surgir muchas veces en mis trabajos y el siguiente 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, el Date.parse La función debería funcionar para la mayoría de los tipos de entrada, pero se sabe que tiene problemas con algunos formatos como "AAAA MM DD", por lo que debes probarlo antes de usarlo.Sin embargo, creo recordar que la mayoría de los navegadores interpretarán la cadena de fecha proporcionada a Date.parse según la configuración regional de la computadora.

Además, el multiplicador de 86400000 debe ser cualquiera que sea el rango de días que esté buscando.Entonces, si está buscando fechas con al menos una semana de diferencia, entonces debería ser siete.

Otros consejos

Entonces, si lo entiendo actualmente, debes mirar si una fecha es más grande que la otra.

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

Luego debe analizar las cadenas que obtiene de la interfaz de usuario, con Date.parse, de esta manera:

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

¿Eso ayuda?

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 puedes pasar al constructor Date() para construir una fecha.También puedes construir una nueva fecha con la hora actual:

var now = new Date();

y establecer varias propiedades en él:

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

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top