Ich kann den folgenden Code anscheinend nicht richtig zum Laufen bringen. Während es die Differenz in den Daten berechnet, berücksichtigt es nicht die Jahre, was es weit weg wirft. Der folgende Code gibt eine Differenz von nur 4 Tagen zurück und ignoriert die Jahre?

Wie kann das behoben werden?

<!DOCTYPE html>

<html>

  <head>

    <script type="text/javascript">
    function test() {

      var today = "27/11/2013"
      today = new Date(today.split('/')[2],today.split('/')[1],today.split('/')[0]);

      var date2 = "23/02/2011"
      date2 = new Date(date2.split('/')[2],date2.split('/')[1],date2.split('/')[0]);

      var diff = today.getDate() - date2.getDate()
      alert(diff)
  }
  </script>

</head>

<body>
  <input type="button" value="test date" onclick="test()"/>
</body>

</html>
1
Jason Kelly 27 Nov. 2013 im 20:18

4 Antworten

Beste Antwort

Sie verwenden die Methode .getDate(), die den Tag des Monats zurückgibt, sodass Sie nur die Tage dieses bestimmten Monats miteinander vergleichen. Verwenden Sie die Methode getTime(), um eine Millisekunden-Darstellung des Datums zurückzugeben, die zum Vergleich verwendet werden kann. Denken Sie auch daran, dass Sie bei der Verwendung von JavaScript-Monaten -1 verwenden müssen, wenn Sie ein Datum erstellen, da 0 Januar und 11 Dezember ist. Dies gilt auch in umgekehrter Richtung, wenn Sie eine Datumszeichenfolge manuell aus einem Datumsobjekt erstellen. Denken Sie daran, dem Monat 1 hinzuzufügen.

Hier ist ein Code, der zwei Daten vergleichen und die Differenz in Tagen zurückgeben soll.

var today = "27/11/2013"
today = new Date(today.split('/')[2],today.split('/')[1]-1,today.split('/')[0]);
var date2 = "23/02/2011"
date2 = new Date(date2.split('/')[2],date2.split('/')[1]-1,date2.split('/')[0]);
var timeDiff = Math.abs(date2.getTime() - today.getTime());
var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)); 
alert(diffDays)​; //1008

Sie erstellen zwei Datumsobjekte, vergleichen ihre Millisekunden-Darstellungen mit .getTime() und konvertieren diese dann wieder in Tage, indem Sie sie wieder aufteilen.

Hier ist eine Geige

3
Mark Walters 13 Okt. 2017 im 07:41

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

Sie verwenden getDate(), das einen Tag des Monats zurückgibt. Deshalb wird das Jahr ignoriert. Vergleichen Sie stattdessen einfach die folgenden Daten:

var diff = today - date2;

Diff enthält dann die Differenz in Millisekunden, die Sie nach Belieben ausführen können.

2
ToastyMallows 27 Nov. 2013 im 16:25

GetDate () Gibt den Tag des Monats zurück (von 1-31)

1
Paul Whelan 27 Nov. 2013 im 16:22

Möglicherweise müssen Sie getDate(), getMonth() und getFullYear() einzeln verwenden. Also vielleicht so etwas wie:

var day = today.getDate() - date2.getDate()
var month = today.getMonth() - date2.getMonth()
var year = today.getFullYear() - date2.getFullYear()

alert(month + "/" + day + "/" + year)
0
LandyCandy 27 Nov. 2013 im 16:29