413 Stimmen

Wie berechnet man die Anzahl der Tage zwischen zwei Daten?

Ich habe zwei Eingabedaten, die vom Date Picker Steuerelement genommen werden. Ich habe Startdatum 2/2/2012 und Enddatum 2/7/2012 ausgewählt. Ich habe folgenden Code für das geschrieben.

Das Ergebnis sollte 6 sein, aber ich erhalte 5.

function SetDays(invoker) {   
    var start = $find('<%=StartWebDatePicker.ClientID%>').get_value();
    var end = $find('<%=EndWebDatePicker.ClientID%>').get_value();

    var oneDay=1000 * 60 * 60 * 24;
    var difference_ms = Math.abs(end.getTime() - start.getTime())
    var diffValue = Math.round(difference_ms / oneDay);
}

Kann mir jemand sagen, wie ich den genauen Unterschied feststellen kann?

910voto

Supr Punkte 17992

http://momentjs.com/ ou https://date-fns.org/

Aus den Moment-Dokumenten:

var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 28]);
a.diff(b, 'days')   // =1

oder den Anfang einschließen:

a.diff(b, 'days')+1   // =2

Das ist besser, als sich manuell mit Zeitstempeln und Zeitzonen herumzuschlagen.

Je nach Ihrem speziellen Anwendungsfall können Sie entweder

  1. 使用方法 a/b.startOf('day') y/o a/b.endOf('day') um zu erzwingen, dass das diff an den "Enden" inklusiv oder exklusiv ist (wie von @kotpal in den Kommentaren vorgeschlagen).
  2. Drittes Argument setzen true um einen Gleitkomma-Diff zu erhalten, den Sie dann Math.floor , Math.ceil ou Math.round nach Bedarf.
  3. Option 2 kann auch durch folgende Maßnahmen erreicht werden 'seconds' anstelle von 'days' und dann dividiert durch 24*60*60 .

91voto

Rakesh Prajapati Punkte 1000

Wenn Sie Folgendes verwenden moment.js können Sie es leicht tun.

var start = moment("2018-03-10", "YYYY-MM-DD");
var end = moment("2018-03-15", "YYYY-MM-DD");

//Difference in number of days
moment.duration(start.diff(end)).asDays();

//Difference in number of weeks
moment.duration(start.diff(end)).asWeeks();

Wenn Sie die Differenz zwischen einem gegebenen Datum und dem aktuellen Datum in Tagen (ohne Berücksichtigung der Zeit) ermitteln möchten, müssen Sie die Zeit aus dem Moment-Objekt des aktuellen Datums wie folgt entfernen

moment().startOf('day')

So finden Sie die Differenz zwischen einem bestimmten Datum und dem aktuellen Datum in Tagen

var given = moment("2018-03-10", "YYYY-MM-DD");
var current = moment().startOf('day');

//Difference in number of days
moment.duration(given.diff(current)).asDays();

23voto

Sumit Punkte 545

Versuchen Sie dies mit moment.js (Seine ganz einfach zu berechnen Datum Operationen in Javascript)

erstesDatum.diff(zweitesDatum, 'Tage', false); // true|false für Bruchwert

Als Ergebnis erhalten Sie die Anzahl der Tage in ganzen Zahlen.

20voto

Richard Punkte 1128

Versuchen Sie es:

//Difference in days

var diff =  Math.floor(( start - end ) / 86400000);
alert(diff);

19voto

Martin Kravec Punkte 167

Das funktioniert bei mir:

const from = '2019-01-01';
const to   = '2019-01-08';

Math.abs(
    moment(from, 'YYYY-MM-DD')
      .startOf('day')
      .diff(moment(to, 'YYYY-MM-DD').startOf('day'), 'days')
  ) + 1
);

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