Frage zu DateDiff

Hallo,

ich habe eine Frage zu DateDiff$. Ich versuche auf einem Formular die Anzahl Stunden, Minuten und Sekunden zwischen 2 Zeitstempeln auszugeben. Dabei ist mir folgendes aufgefallen:

Vom Kommando DateDiff$(,,“%h”) erwarte ich die Anzahl der Stunden zwischen den beiden Zeitstempeln (zumindest lese ich so die Dokumentation). Es wird aber ab einer Differenz von > 30 Minuten als Ergebnis eine volle Stunde angegeben (offenbar aufgerundet):

Beispiel:
‘2023-11-27 18:02:51’ - ‘2023-11-27 18:41:09’ ergibt den Wert 1 (ca. 38 Minuten)
‘2023-11-27 18:02:51’ - ‘2023-11-27 18:31:09’ ergibt den Wert 0 (ca. 28 Minuten)

das gleiche Bild ergibt sich für die Minuten (Ausgabe als “%i”):
‘2023-11-27 18:02:51’ - ‘2023-11-27 18:03:20’ ergibt den Wert 0 (29 Sekunden)
‘2023-11-27 18:02:51’ - ‘2023-11-27 18:03:22’ ergibt den Wert 1 (31 Sekunden)

Gebe ich die Differenz “in gänze” als formatierten String aus, erhalte ich das korrekte Ergebnis

Beispiel:
‘2023-11-27 18:02:51’ - ‘2023-11-27 18:03:22’ ergibt den Wert “000:00:31” mit dem FormatString “03h:02i:%02s”

Das beschriebene Verhalten konnte ich auf dem Kundensystem (LL 26.5) als auch auf meiner LaborUmgebung (LL29) beobachten…

Habe ich einen Denkfehler?

Das ist richtig und tatsächlich “by design”. Die DateDiff$-Funktion prüft intern, ob auch kleinere Einheiten (also z.B. Minuten oder Sekunden) ausgegeben werden und wendet - je nachdem ob dies der Fall ist - eine Rundung auf den jeweils größeren Wert an oder auch nicht. Insofern ändert sich der Rückgabewert der Platzhalter je nach Kontext. Das sollten wir definitiv besser dokumentieren, es tut mir leid, wenn das zu Verwirrung geführt hat.

Ein Workaround könnte darin bestehen, den vollen String zu formatieren aber den gewünschten Teil auszuschneiden. Das könnte so aussehen:

RegExMatch$(DateDiff$(Date("2023-11-27 18:02:51"), Date("2023-11-27 18:03:22"), "%02h:%02i:%02s"), "([0-9]+):([0-9]+):([0-9]+)", 1)

Erst wird also die Datumsdifferenz “ganz normal” mit hh:mm:ss formatiert. Anschließend kann dann per Regulärem Ausdruck die jeweils gewünschte Gruppe ausgegeben werden (das ist der letzte Parameter der Funktion). 1 liefert die Stunden, 2 die Minuten und 3 die Sekunden.

Ist das ein gangbarer Weg um das Problem zu lösen :slight_smile:?