German DateDiff Problem

strupp01

Active Member
Licensed User
Longtime User
In meinem Programm berechne ich über 100 Differenztage zwischen zwei Datumstagen der letzten 10 Jahre. In den meisten Fällen erhalte ich das richtige Ergebnis.
Bei einigen Daten jedoch wird eine fehlerhafte Anzahl ausgegeben.

Beispiel : Tage_dif = DateDiff("30.03.2023", "16.03.2023")

Hier wird als Differenz 13 Tage ausgegeben. Die Berechnung erfolgt so

B4X:
Sub DateDiff(Date1 As String, Date2 As String)As Long   
    Dim tks As Long
  
    tks = DateTime.DateParse(Date1) - DateTime.DateParse(Date2)
    Return tks / DateTime.TicksPerDay
End Sub

Als mögliche Fehlerursache könnte ich mir die Umstellung auf Sommerzeit vorstellen.
Wie kann ich die Differenz an Tagen berechnen, dass hier 14 Tage als Ergebnis herauskommt ?

Gruss strupp01
 

emexes

Expert
Licensed User
Dies sollte funktionieren:
B4X:
 Return tks / DateTime.TicksPerDay + 0.5
aber manche Leute mögen es vielleicht nicht 🤣
 

Filippo

Expert
Licensed User
Longtime User
In meinem Programm berechne ich über 100 Differenztage zwischen zwei Datumstagen der letzten 10 Jahre. In den meisten Fällen erhalte ich das richtige Ergebnis.
Bei einigen Daten jedoch wird eine fehlerhafte Anzahl ausgegeben.

Beispiel : Tage_dif = DateDiff("30.03.2023", "16.03.2023")

Hier wird als Differenz 13 Tage ausgegeben. Die Berechnung erfolgt so

B4X:
Sub DateDiff(Date1 As String, Date2 As String)As Long  
    Dim tks As Long
 
    tks = DateTime.DateParse(Date1) - DateTime.DateParse(Date2)
    Return tks / DateTime.TicksPerDay
End Sub

Als mögliche Fehlerursache könnte ich mir die Umstellung auf Sommerzeit vorstellen.
Wie kann ich die Differenz an Tagen berechnen, dass hier 14 Tage als Ergebnis herauskommt ?

Gruss strupp01
Hast du schon mit "dateutils" probiert?
 

Heinz

Active Member
Licensed User
Longtime User
Man kann das auch ganz einfach selber berechnen, wenn man die Datums
ins Datenbankformat (ähnlich US-Schreibweise) umwandelt :

DD.MM.YYY = YYYYMMDD

30.03.2023 = 20230330
16.03.2023 = 20230316

20230330
- 20230316
_____________
14

Damit kann man viel leichter rechnen und ggf. auch z.b. Monate filtern, da YYYYMMDD

immer die gleichen Längen besitzen.
Benutze ich häufig unter Windows zumal ich in meiner Sprache die dBase-ähnlichen Befehle
wie CTodD() und DToC$() habe. Aber das kann man hier genauso gut nachbilden. Ist ja nur
das Verschieben von YYYY, MM, DD an die richtigen Stellen und den Punkt weglassen.
Das ganze halt in einfachem String.
 

emexes

Expert
Licensed User
Man kann das auch ganz einfach selber berechnen,
wenn man die Datums ins Datenbankformat
YYYYMMDD
Damit kann man viel leichter rechnen

Dies ergibt die Differenz in Jahren, Monaten und Tagen, vorausgesetzt, dass der spätere MM und DD größer oder gleich dem entsprechenden früheren MM und DD ist.
 
Top