Wie ermittle ich die Anzahl der Tage zwischen zwei Daten in JavaScript? Zum Beispiel, zwei Daten in Eingabefeldern gegeben:
<input id="first" value="1/1/2000"/>
<input id="second" value="1/1/2001"/>
<script>
alert(datediff("day", first, second)); // what goes here?
</script>
Hier ist eine schnelle und schmutzige Implementierung von datediff
, als Beweis des Konzepts, um das Problem, wie in der Frage dargestellt, zu lösen. Sie beruht auf der Tatsache, dass man die verstrichenen Millisekunden zwischen zwei Daten durch Subtraktion erhalten kann, was sie in ihren primitiven Zahlenwert zwingt (Millisekunden seit Beginn des Jahres 1970).
// new Date("dateString") is browser-dependent and discouraged, so we'll write
// a simple parse function for U.S. date format (which does no error checking)
function parseDate(str) {
var mdy = str.split('/');
return new Date(mdy[2], mdy[0]-1, mdy[1]);
}
function datediff(first, second) {
// Take the difference between the dates and divide by milliseconds per day.
// Round to nearest whole number to deal with DST.
return Math.round((second-first)/(1000*60*60*24));
}
alert(datediff(parseDate(first.value), parseDate(second.value)));
<input id="first" value="1/1/2000"/>
<input id="second" value="1/1/2001"/>
Sie sollten sich darüber im Klaren sein, dass die "normalen" Date-APIs (ohne "UTC" im Namen) in der lokalen Zeitzone des Browsers des Benutzers arbeiten, so dass Sie im Allgemeinen auf Probleme stoßen könnten, wenn sich Ihr Benutzer in einer Zeitzone befindet, die Sie nicht erwarten, und Ihr Code mit der Sommerzeitumstellung umgehen muss. Sie sollten die Dokumentation für das Date-Objekt und seine Methoden sorgfältig lesen und für kompliziertere Aufgaben unbedingt eine Bibliothek verwenden, die sicherere und leistungsfähigere APIs für die Datumsmanipulation bietet.
Zur Veranschaulichung verwendet das Snippet der Kürze halber named access on the window
object, aber in der Produktion sollten Sie standardisierte APIs wie getElementById oder, was wahrscheinlicher ist, ein UI-Framework verwenden;
Ich würde gehen Sie vor und Grab dieses kleine Dienstprogramm und in ihm finden Sie Funktionen zu diesem für Sie. Hier ist ein kurzes Beispiel:
<script type="text/javascript" src="date.js"></script>
<script type="text/javascript">
var minutes = 1000*60;
var hours = minutes*60;
var days = hours*24;
var foo_date1 = getDateFromFormat("02/10/2009", "M/d/y");
var foo_date2 = getDateFromFormat("02/12/2009", "M/d/y");
var diff_date = Math.round((foo_date2 - foo_date1)/days);
alert("Diff date is: " + diff_date );
</script>
Wie wäre es mit der Verwendung von formatDate aus dem DatePicker-Widget? Sie könnten es verwenden, um die Daten in Zeitstempel-Format (Millisekunden seit 01/01/1970) zu konvertieren und dann eine einfache Subtraktion durchführen.