Joergi: Differenz zwischen zwei Datumsangaben

Hallo zusammen,

ich habe ein Problem, die genaue Differenz zwischen zwei Daten in Jahr, Monat und Tag in javascript genau auszugeben. Der script

<script>
const tEarlier = new Date("2026-02-01");
const tLater = new Date("2026-05-01");
const tMillisecondsElapsed = tLater - tEarlier;

const tELapsed = new Date(tMillisecondsElapsed);
const year = tELapsed.getFullYear();
const elapsedYear = year - 1970;
tELapsed.setFullYear(elapsedYear);

let strDate = tELapsed.toISOString().slice(0, 10); //ISO date is yyyy-mm-dd
strDate = strDate.split("-");
strDate = `${strDate[1]}-${strDate[2]}-${strDate[0]}`;

alert(strDate);
</script>

gibt als Ergebnis 3 Monate und 31 Tage an. Der PHP script

<?php
$datum1 = new DateTime("2026-05-01");
$datum2 = new DateTime("2026-02-01");
$differenz = $datum1->diff($datum2);
echo $differenz->format('%y Jahre, %m Monate, %d Tage');
?>

zeigt hingegen als Ergebnis genau drei Monate an. Und das ist richtig. Wie kann ich javascript dazu bringen, Monate wie z.B. den Februar korrekt zu berechnen?

Vielen Dank im voraus für Eure Hilfe

  1. @@Joergi

    const tEarlier = new Date("2026-02-01");
    const tLater = new Date("2026-05-01");
    const tMillisecondsElapsed = tLater - tEarlier;
    
    const tELapsed = new Date(tMillisecondsElapsed);
    

    Das ist Murks. tMillisecondsElapsed gibt keinen Zeitpunkt an, sondern eine Zeitdauer. Es ist unsinnig, eine Zeitdauer als Argument für den Date-Konstruktor zu verwenden.

    zeigt hingegen als Ergebnis genau drei Monate an.

    „Genau“ und „Monate“ widerspricht sich. Da Monate unterschiedlich lang sind, ist eine Angabe „x Monate“ niemals genau.

    Und das ist richtig. Wie kann ich javascript dazu bringen, Monate wie z.B. den Februar korrekt zu berechnen?

    Mit einer Bibliothek, die die Berechnung von Zeitdauern und deren Ausgabe in verschiedenen Formaten implementiert hat.

    🖖 Live long and prosper

    --
    “In my home, the America I love, the America I've written about, that has been a beacon of hope and liberty for 250 years, is currently in the hands of a corrupt, incompetent and treasonous administration. Tonight, we ask all who believe in democracy and the best of our American spirit, to rise with us, raise your voices against authoritarianism, and let freedom reign.”
    — Bruce Springsteen, Manchester 2025-05-14
    1. Moin Gunnar,

      Und das ist richtig. Wie kann ich javascript dazu bringen, Monate wie z.B. den Februar korrekt zu berechnen?

      Mit einer Bibliothek, die die Berechnung von Zeitdauern und deren Ausgabe in verschiedenen Formaten implementiert hat.

      Für JavaScript sind das etwa Moment.js, date-fns, Luxon oder day.js.

      Mein persönlicher Favorit dabei ist date-fns, weil ich hier nur den Teil einbinden kann, der tatsächlich relevant ist für mein Problem.

      Gruß,

      --
      a.k.a. André
      1. Danke für Eure Ratschläge. Ich habe es mal mit day.js probiert und folgende Routine erstellt:

        <script type="text/javascript" src="dayjs.min.js"></script>
        <script>
        const date1 = dayjs('2026-05-03')
        a=date1.diff('2026-02-01', 'month')
        b=date1.diff('2026-02-01', 'day')
        alert (a+" Monate / "+b+" Tage");
        </script>
        

        Der script zeigt mir die Differenz in ganzen Monaten oder Tagen an (3 Monate / 91 Tage). Wie bekomme ich es hin, dass er mir neben den Monaten nur die Resttage anzeigt. z.B. hier: 3 Monate / 2 Tage?

        1. Hallo,

          Wie bekomme ich es hin, dass er mir neben den Monaten nur die Resttage anzeigt. z.B. hier: 3 Monate / 2 Tage?

          Du kannst dir die Dauer als String oder als Objekt geben lassen und da dann das gewünschte rauspfriemln: z. B. toString

          Gruß
          Kalk

          1. Jau,

            danke für den Tip. Werde es direkt ausprobieren 😀