578 Stimmen

Wie berechnet man die Anzahl der Tage zwischen zwei Daten?

Ein Beispiel: Zwei Daten in Eingabefeldern:

<input id="first" value="1/1/2000"/>
<input id="second" value="1/1/2001"/>

<script>
  alert(datediff("day", first, second)); // what goes here?
</script>

Wie ermittle ich die Anzahl der Tage zwischen zwei Daten in JavaScript?

20 Stimmen

In 99 % der Fälle, in denen der Benutzer nach der "Anzahl der Tage zwischen zwei Daten" fragt, versteht er nicht, dass er versucht, Äpfel mit Birnen zu vergleichen. Das Problem wird so einfach, wenn man fragt: "Wie viele DATEN liegen in einem DATUMSBEREICH?", oder wie viele Quadrate ich auf dem Kalender ankreuzen muss. Die Verwirrung wird uns durch die datetime-Datenstruktur auferlegt, die reiner Unfug ist. Es gibt so etwas wie datetime nicht, es gibt Datum und es gibt Zeit, zwei sehr unterschiedliche Objekte sowohl in der Natur als auch im Verhalten.

0 Stimmen

Für eine Funktion, die die Differenz in (ganze) Zeiteinheiten aufteilt, verwenden Sie die Antwort unter stackoverflow.com/a/53092438/3787376 .

1 Stimmen

Meiner Meinung nach sollte diese Frage gestrichen oder zumindest mit "vermeiden" gekennzeichnet werden, da die meisten Antworten entweder falsch oder von verschiedenen Bibliotheken abhängig sind.

10voto

Timo Kähkönen Punkte 11331

Besser ist es, DST, Math.ceil, Math.floor usw. durch die Verwendung von UTC-Zeiten loszuwerden:

var firstDate = Date.UTC(2015,01,2);
var secondDate = Date.UTC(2015,04,22);
var diff = Math.abs((firstDate.valueOf() 
    - secondDate.valueOf())/(24*60*60*1000));

Dieses Beispiel ergibt eine Differenz von 109 Tagen. 24*60*60*1000 ist ein Tag in Millisekunden.

0 Stimmen

Wenn Sie das aktuelle Datum in UTC haben wollen, können Sie dies auch tun: var now = new Date(); var utcNow = Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate())

9voto

riv Punkte 101

Es ist möglich, die Differenz zwischen zwei Daten, die in verschiedenen TZs liegen, mit der folgenden Formel zu berechnen:

var start = new Date('10/3/2015');
var end = new Date('11/2/2015');
var days = (end - start) / 1000 / 60 / 60 / 24;
console.log(days);
// actually its 30 ; but due to daylight savings will show 31.0xxx
// which you need to offset as below
days = days - (end.getTimezoneOffset() - start.getTimezoneOffset()) / (60 * 24);
console.log(days);

8voto

guilin 桂林 Punkte 16370

Ich fand diese Frage, wenn ich einige berechnen auf zwei Datum tun wollen, aber das Datum haben Stunden und Minuten Wert, ich modifiziert @michael-liu 's Antwort auf meine Anforderung passen, und es bestand meinen Test.

diff Tage 2012-12-31 23:00 y 2013-01-01 01:00 sollte gleich 1 sein. (2 Stunden) verschiedene Tage 2012-12-31 01:00 y 2013-01-01 23:00 sollte gleich 1 sein. (46 Stunden)

function treatAsUTC(date) {
    var result = new Date(date);
    result.setMinutes(result.getMinutes() - result.getTimezoneOffset());
    return result;
}

var millisecondsPerDay = 24 * 60 * 60 * 1000;
function diffDays(startDate, endDate) {
    return Math.floor(treatAsUTC(endDate) / millisecondsPerDay) - Math.floor(treatAsUTC(startDate) / millisecondsPerDay);
}

7voto

Aravindh Gopi Punkte 1986
var start= $("#firstDate").datepicker("getDate");
var end= $("#SecondDate").datepicker("getDate");
var days = (end- start) / (1000 * 60 * 60 * 24);
 alert(Math.round(days));

jsfiddle Beispiel :)

7voto

Popmatic Punkte 133

Dies ist vielleicht nicht die eleganteste Lösung, aber sie scheint die Frage mit einem relativ einfachen Code zu beantworten, denke ich. Können Sie nicht etwas wie dieses verwenden:

function dayDiff(startdate, enddate) {
  var dayCount = 0;

  while(enddate >= startdate) {
    dayCount++;
    startdate.setDate(startdate.getDate() + 1);
  }

return dayCount; 
}

Dies setzt voraus, dass Sie Datumsobjekte als Parameter übergeben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X