Pergunta

Em JavaScript, qual é a melhor maneira de determinar se uma data fornecida está dentro de um intervalo válido?

Um exemplo disso pode ser verificar se a entrada do usuário requestedDate faz parte da próxima semana de trabalho válida.Observe que isso não é apenas verificar se uma data é maior que outra, pois uma data válida seria igual ou maior que o limite inferior do intervalo, enquanto menor ou igual ao limite superior do intervalo.

Foi útil?

Solução

Na verdade, esse é um problema que já vi surgir antes em meus trabalhos e o trecho de código a seguir é minha resposta para o 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;
}

Agora, algumas coisas a serem observadas sobre este código, o Date.parse A função deve funcionar para a maioria dos tipos de entrada, mas sabe-se que há problemas com alguns formatos, como "AAAA MM DD", portanto, você deve testá-la antes de usá-la.No entanto, lembro que a maioria dos navegadores interpretará a sequência de datas fornecida a Date.parse com base nas configurações de região do computador.

Além disso, o multiplicador de 8.640.000 deve ser qualquer que seja o intervalo de dias que você está procurando.Portanto, se você está procurando datas com pelo menos uma semana de intervalo, devem ser sete.

Outras dicas

Então, se bem entendi, você precisa verificar se uma data é maior que a outra.

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

Em seguida, você precisa analisar as strings obtidas da IU, com Date.parse, assim:

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

Isso ajuda?

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
}

Existem vários formatos que você pode passar para o construtor Date() para construir uma data.Você também pode construir uma nova data com a hora atual:

var now = new Date();

e defina várias propriedades nele:

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

Ver http://www.javascriptkit.com/jsref/date.shtml ou Google para mais detalhes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top