Domanda

In JavaScript, qual è il modo migliore per determinare se una data fornita rientra in un intervallo valido?

Un esempio di ciò potrebbe essere il controllo per vedere se l'input dell'utente requestedDate fa parte della prossima settimana lavorativa valida.Tieni presente che questo non si limita a verificare se una data è maggiore di un'altra poiché una data valida sarebbe uguale o maggiore del limite inferiore dell'intervallo mentre inferiore o uguale al limite superiore dell'intervallo.

È stato utile?

Soluzione

Questo è in realtà un problema che ho visto sorgere spesso nei miei lavori e il seguente frammento di codice è la mia risposta 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;
}

Ora un paio di cose da notare su questo codice, il Date.parse dovrebbe funzionare per la maggior parte dei tipi di input, ma è noto che presenta problemi con alcuni formati come "AAAA MM GG", quindi dovresti testarlo prima di utilizzarlo.Tuttavia, mi sembra di ricordare che la maggior parte dei browser interpreterà la stringa della data fornita a Date.parse in base alle impostazioni della regione del computer.

Inoltre, il moltiplicatore per 86400000 dovrebbe essere qualunque sia l'intervallo di giorni che stai cercando.Quindi, se stai cercando date distanti almeno una settimana, dovrebbero essere sette.

Altri suggerimenti

Quindi, se ho capito bene, devi controllare se una data è più grande dell'altra.

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

Devi quindi analizzare le stringhe che ricevi dall'interfaccia utente, con Date.parse, in questo modo:

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

Questo aiuta?

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
}

Esistono diversi formati che è possibile passare al costruttore Date() per costruire una data.Puoi anche costruire una nuova data con l'ora corrente:

var now = new Date();

e impostare varie proprietà su di esso:

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

Vedere http://www.javascriptkit.com/jsref/date.shtml O Google per ulteriori dettagli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top