Menü

Werkzeuge durchsuchenÄnderungsprotokoll

zum Navigieren zum ÖffnenBeschreiben Sie das Problem, nicht das Tool

Ratgeber

Ein Monat ist keine Dauer und andere Datumsfallen

Daten verhalten sich wie Zahlen, bis sie es plötzlich nicht mehr tun. Ein Monat hat keine feste Länge, ein Tag hat nicht immer 24 Stunden und für die Frage „Wie viele Tage dazwischen“ gibt es zwei richtige Antworten, je nachdem, ob Sie die Endpunkte zählen. Jeder dieser Fehler hat zu echten Fehlern in echter Software geführt.

Zwei richtige Antworten auf die Frage „Wie viele Tage“

Von Montag bis Freitag sind es vier Tage, wenn man sie abzieht, und fünf, wenn man die beteiligten Tage mitzählt.

Beide kommen in der Praxis zum Einsatz. Ein Hotel berechnet vier Nächte zwischen dem Check-in am Montag und dem Check-out am Freitag. Ein fünftägiges Festival von Montag bis Freitag zählt inklusive. Kündigungsfristen, Urlaubsansprüche und Gerichtsfristen verwenden unterschiedlich das eine oder das andere, und in den Gesetzen ist normalerweise festgelegt, welches.

Es gibt keine korrekte Konvention, nur eine festgelegte. Ein Tool, das einen Tagesunterschied meldet, muss sagen, was es tut, und ein Vertrag, der keine Angaben macht, weist eine Unklarheit auf, die ungefähr einen Tag wert ist.

Vor dem Weiterlesen

Ein Abonnement beginnt am 31. Januar und verlängert sich monatlich. Wann ist die zweite Verlängerung?

  • Ja – und dieses zweite Date ist das Überraschende.

  • Das würde eine Verlängerung des ursprünglichen Datums um zwei Monate bedeuten. Die meisten Systeme addieren stattdessen einen Monat zum vorherigen Ergebnis.

  • Bei manchen Systemen kommt es zu einem solchen Überlauf, aber eine Klemmung bis zum Monatsende kommt weitaus häufiger vor.

28. Februar, dann 28. März. Klemmen ist die übliche Konvention und hat eine wissenswerte Konsequenz: Das zweimalige Hinzufügen eines Monats ist nicht dasselbe wie das einmalige Hinzufügen von zwei Monaten. Ab dem 31. Januar ergibt sich aus Spannen der 28. Februar und dann der 28. März; Die direkte Addition von zwei Monaten ergibt den 31. März. Beides ist kein Fehler, und jedes System, das wiederkehrende monatliche Berechnungen durchführt, muss einen auswählen und konsistent bleiben.

Monate sind keine Länge

Tage, Stunden und Sekunden sind Dauern: feste Mengen, die Sie hinzufügen können. Ein Monat ist nicht einer. Es handelt sich um eine Kalendereinheit, deren Länge davon abhängt, um welchen Monat es sich handelt.

„Einen Monat nach dem 31. Januar“ hat also keine eindeutige Antwort. Es gibt keinen 31. Februar. Die verwendeten Konventionen sind:

  • Am Ende des Monats festklemmen. 28. Februar oder 29. in einem Schaltjahr. Am häufigsten. - Überlauf. 2. oder 3. März, wobei der Tag über das Ende hinaus gezählt wird.

Die Klemmung ist die übliche Wahl und hat eine wissenswerte Konsequenz: Das zweimalige Hinzufügen eines Monats kann von der einmaligen Addition von zwei Monaten abweichen. Ab dem 31. Januar ergibt die Klemmung den 28. Februar und dann den 28. März; Die direkte Addition von zwei Monaten ergibt den 31. März. Beides ist kein Fehler, und jedes System, das wiederkehrende monatliche Berechnungen durchführt, muss einen auswählen und konsistent sein.

Ein Zeitplan mit wiederkehrenden Terminen kann stattdessen den 31. Januar als dauerhaften Anker beibehalten: Der Februar erhält seinen lokalen Ersatz für das Monatsende, und der März kehrt zum 31. zurück. Das ist eine dritte bewusste Regel, keine Korrektur der beiden oben genannten. Der Mangel besteht nicht darin, einen von ihnen auszuwählen; Es führt monatliche Berechnungen durch, ohne zu sagen, was der Zeitplan bedeutet.

Das Gleiche gilt für Jahre, in denen das einzige unangenehme Datum der 29. Februar ist, und es ist jedes Mal unangenehm.

Ein Tag hat nicht immer 24 Stunden

Wenn die Sommerzeit eingehalten wird, hat ein Tag im Jahr 23 Stunden und ein anderer 25 Stunden. Multiplizieren Sie die Tage mit 86.400 Sekunden und Sie haben für den größten Teil des Jahres korrekt.

An den Rändern wird es noch schlimmer. Zeitzonen ändern ihre Regeln – die IANA-Datenbank, die sie aufzeichnet, wird mehrmals im Jahr aktualisiert, hauptsächlich weil eine Gerichtsbarkeit etwas entschieden hat. Länder haben den Offset komplett geändert, und einige wenige haben beim Überschreiten der Datumsgrenze einen Kalendertag übersprungen.

Die praktischen Regeln, die fast alles davon vermeiden:

  • Arbeiten Sie in UTC und konvertieren Sie es nur zur Anzeige in die Ortszeit. - Speichern Sie einen Moment als Moment, nicht als lokale Uhrzeit mit implizierter Zone. - Gehen Sie niemals von einer festen Anzahl von Sekunden in einem Tag, Monat oder Jahr aus. - Kalenderunterschiede an Kalenderdaten berechnen, nicht durch Division der verstrichenen Millisekunden.

Aus diesem Grund muss ein Timer die Uhr ablesen

Ein Countdown, der jedes Mal, wenn ein Intervall ausgelöst wird, eine Sekunde von seiner eigenen Gesamtsekunde abzieht, driftet immer in die gleiche Richtung.

Intervalle können nicht garantiert werden. Der Browser drosselt sie in einem Hintergrundtab stark, die Maschine kann schlafen und aufwachen, und jeder Tick kommt eher etwas spät als etwas früh. Bei jeder davon handelt es sich um eine Sekunde, die der Zähler nie abgezogen hat, sodass ein in einem anderen Tab noch laufender Timer sichtbar zu spät endet.

Der Fix ist kein genaueres Intervall. Es dient dazu, aufzuzeichnen, wann der Timer gestartet ist, und bei jedem Tick die verbleibende Zeit von der tatsächlichen Uhr abzuleiten. Dann führt die Drosselung für einen Moment zu einer veralteten Anzeige und nicht zu einem sich anhäufenden Fehler, und der Timer ist in dem Moment korrekt, in dem die Registerkarte erneut betrachtet wird.

Das ist ein allgemeines Prinzip für alles, was die verstrichene Zeit aufzeichnet: Das Intervall ist der Auslöser für eine Neuzeichnung, und die Uhr ist das, von dem die Antwort kommt.

Fragen

Wie viele Tage liegen zwischen Montag und Freitag?

Vier oder fünf, und beide sind richtig. Vier ist der Unterschied – die Anzahl der Nächte zwischen ihnen. Fünf ist die Gesamtzahl der beteiligten Tage, was eine Urlaubsbuchung oder einen Hotelaufenthalt bedeutet. Keines ist richtiger als das andere, daher muss jedes Tool angeben, was es meldet, und jeder Vertrag muss angeben, was es bedeutet.

Warum ist das Hinzufügen eines Monats nicht eindeutig?

Da Monate unterschiedlich lang sind, gibt es für einen Monat nach dem 31. Januar keine eindeutige Antwort – je nach Konvention der 28. Februar, der 2. März oder der 3. März. Die meisten Systeme beschränken sich auf das Ende des Zielmonats, was bedeutet, dass das zweimalige Hinzufügen eines Monats vom gleichzeitigen Hinzufügen von zwei Monaten abweichen kann. Tage sind eindeutig; Monate sind es nicht.

Hat ein Tag immer 24 Stunden?

Nein. In Regionen, in denen die Sommerzeit gilt, dauert ein Tag im Jahr 23 Stunden und ein anderer 25 Stunden. Einige Zeitzonen haben ihren Offset vollständig geändert und einige haben einen Kalendertag übersprungen. Die Berechnung einer Dauer durch Multiplikation von Tagen mit 86.400 Sekunden ist in den meisten Fällen richtig und in einer Weise falsch, die schwer zu reproduzieren ist.

Warum sollte ein Timer die Uhr ablesen, anstatt Ticks zu zählen?

Weil Intervalle nicht zuverlässig sind. Ein Browser drosselt die Timer in einer Hintergrundregisterkarte, das Gerät geht in den Ruhezustand und jeder Tick driftet leicht ab. Ein Timer, der seine eigenen Ticks zählt, fällt zunehmend hinter die Echtzeit zurück und der Fehler nimmt zu, je länger er läuft. Wenn Sie jedes Mal die tatsächliche Uhr ablesen, ist die Anzeige korrekt, unabhängig davon, was mit den Intervallen passiert ist.

Passende Werkzeuge

Quellen