Ich habe mal ein paar Babysteps mit Temporal gemacht.
heute1 = Temporal.ZonedDateTime.from("2026-02-24T12:25:00+01:00[CET])"; // sic!
dauer = Temporal.Duration.from({ years: 2, days: 8 });
morgen = heute.add(dauer);
heute2 = morgen.subtract(dauer);
console.log(heute1.equals(heute2));
console.log(heute2.toLocaleString());
Das Ergebnis:
false
'23.2.2026 12:29:00 MEZ'
Mit anderen Worten: das Temporal API rechnet, genau wie Mr. Rant Numbers, ohne nachzudenken. Es addiert Jahre, Monate, Tage, etc, in dieser Reihenfolge, und subtrahiert ebenfalls in dieser Reihenfolge. Weil aber "24. Februar +8 Tage" in 2026 und 2028 unterschiedliche Ergebnisse haben, landet man am Ende bei einem Tag Differenz.
Immerhin kommt in PHP das Gleiche heraus, es scheint wohl eine Norm zu geben, wie man hier vorzugehen hat.
Grundsätzlich würde ich aber von <code>x.add(y).subtract(y)</code> erwarten, dass x herauskommt.
Weiß jemand, wie andere Libs mit diesem Problem umgehen?
Rolf
--
sumpsi - posui - obstruxi
sumpsi - posui - obstruxi