Frage

In JavaScript, was ist der beste Weg, um zu bestimmen, ob ein Datum fällt, die innerhalb eines gültigen Bereichs?

Ein Beispiel hierfür könnte sein zu überprüfen, ob die Benutzereingabe requestedDate Teil der nächsten gültigen Arbeitswoche. Beachten Sie, dass dies nicht nur zu überprüfen, ob ein Datum als eine anderen größer wäre als ein gültiges Datum gleich oder größer als das untere Ende des Bereichs, während weniger als oder gleich das oberen Ende des Bereichs.

War es hilfreich?

Lösung

Dieser ist tatsächlich ein Problem, das ich in meinen Arbeiten und das folgende Stück Code ist meine Antwort auf das Problem vor viel kommen gesehen.

// 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;
}

Jetzt ein paar Dinge über diesen Code zu notieren, sollte die Date.parse Funktion für die meisten Eingabetypen arbeiten, aber bekannt ist, Probleme mit einigen Formaten wie „YYYY MM DD“ haben, so dass Sie, dass es vor der Anwendung zu testen. Allerdings scheinen ich daran erinnern, dass die meisten Browser die Datums-String Date.parse gegeben interpretieren, basierend auf den Computern Regionseinstellungen.

Auch sollte der Multiplikator für 86400000 sein, was auch immer der Bereich der Tage die Sie suchen ist. Also, wenn Sie für Termine suchen, abgesehen von mindestens einer Woche sind dann sollte es sieben sein.

Andere Tipps

Also, wenn ich currenctly verstehen, müssen Sie aussehen, wenn ein Datum größer als der andere ist.

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

Sie müssen dann die Saiten analysieren Sie von der Benutzeroberfläche bekommen, mit Date.parse, wie folgt aus:

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

Ist diese Hilfe?

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
}

Es gibt eine Vielzahl von Formaten, die Sie zum Date () Konstruktor können ein Datum zu konstruieren. Sie können auch einen neuen Termin mit der aktuellen Zeit konstruieren:

var now = new Date();

und verschiedene Eigenschaften auf sie gesetzt:

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

Siehe http://www.javascriptkit.com/jsref/date.shtml oder Google für weitere Details.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top