Eigentlich eine triviale Aufgabe, das Datum berechnen das in 1000 Sekunden oder 45 Tagen sein wird. Doch nicht so einfach, den einfach per Date() die Day() Angabe um 45 zu erhöhen läuft nicht, da muss man selbst ran :P
Darum hab ich mir ein kleines Include geschrieben (vorerst kann das Datum nur nach vorne berechnet werden, also in die Zukunft) welches mit das das Datum berechnet das in n {Jahren|Monaten|Tagen|Stunden|Minuten|Sekunden} oder einer Kombination daraus (z.B. in 27 Monaten und 56 Tagen) berechnet, unter Berücksichtigung von verschieden langen Monaten, sämtlichen Regeln für Schaltjahre ... . Bisher nur in die Zukunft, mal sehen ob ichs auch nocht für die Vergangenheit hinklopfe

Auch lässt sich damit z.B. ermitteln wie viele Stunden, Minuten und Sekunden usw. z.B. 200.000 Sekunden sind, mit Date alleine geht das nicht:
Code: Alles auswählen
Define d = Date()
Define but = d
d = IncreaseDate(d, 0, 0, 0, 0, 0, 200000) - but
Debug FormatDate("%hh:%ii:%ss", d)
d = Date(0, 0, 0, 0, 0, 200000)
Debug FormatDate("%hh:%ii:%ss", d)



Code: Alles auswählen
; EnableExplicit
; Schaltjahr - Erkennug
Macro __isLeapYear(Date)
Bool(((Not Year(Date)%4) And Year(Date)%100) Or (Not Year(Date)%400))
EndMacro
; Jahre dazuzählen
Procedure IncreaseYears(Date, NumberOfYears = 1)
ProcedureReturn Date(Year(Date)+NumberOfYears, Month(Date), Day(Date), Hour(Date), Minute(Date), Second(Date))
EndProcedure
; Monate Dazuzählen
Procedure IncreaseMonths(Date, NumberOfMonths = 1)
Protected i
For i = 1 To NumberOfMonths
Select Month(Date)
Case 12
Date = Date(Year(Date)+1, 1, Day(Date), Hour(Date), Minute(Date), Second(Date))
Default
Date = Date(Year(Date), Month(Date)+1, Day(Date), Hour(Date), Minute(Date), Second(Date))
EndSelect
Next
ProcedureReturn Date
EndProcedure
; Tage Dazuzählen
Procedure IncreaseDays(Date, NumberOfDays = 1)
Protected i
For i = 1 To NumberOfDays
Select Month(Date)
Case 4,6,9,11
If Day(Date) = 30
Date = Date(Year(Date), Month(Date)+1, 1, Hour(Date), Minute(Date), Second(Date))
Else
Date = Date(Year(Date), Month(Date), Day(Date)+1, Hour(Date), Minute(Date), Second(Date))
EndIf
Case 1,3,5,7,8,10
If Day(Date) = 31
Date = Date(Year(Date), Month(Date)+1, 1, Hour(Date), Minute(Date), Second(Date))
Else
Date = Date(Year(Date), Month(Date), Day(Date)+1, Hour(Date), Minute(Date), Second(Date))
EndIf
Case 12
If Day(Date) = 31
Date = Date(Year(Date)+1, 1, 1, Hour(Date), Minute(Date), Second(Date))
Else
Date = Date(Year(Date), Month(Date), Day(Date)+1, Hour(Date), Minute(Date), Second(Date))
EndIf
Case 2
If Day(Date) = 29 ; Schaltjahr
Date = Date(Year(Date), Month(Date)+1, 1, Hour(Date), Minute(Date), Second(Date))
ElseIf Day(Date) = 28
; Schaltjahr - Erkennung:
If __isLeapYear(Date)
Date = Date(Year(Date), Month(Date), Day(Date)+1, Hour(Date), Minute(Date), Second(Date))
Else
Date = Date(Year(Date), Month(Date)+1, 1, Hour(Date), Minute(Date), Second(Date))
EndIf
Else
Date = Date(Year(Date), Month(Date), Day(Date)+1, Hour(Date), Minute(Date), Second(Date))
EndIf
EndSelect
Next
ProcedureReturn Date
EndProcedure
; Stunde erhöhen
Procedure IncreaseHours(Date, NumberOfHours = 1)
If (Hour(Date) + NumberOfHours)/24
Date = IncreaseDays(Date, (Hour(Date) + NumberOfHours)/24)
EndIf
ProcedureReturn Date(Year(Date), Month(Date), Day(Date), (Hour(Date) + NumberOfHours)%24, Minute(Date), Second(Date))
EndProcedure
; Minute erhöhen
Procedure IncreaseMinutes(Date, NumberOfMinutes = 1)
If (Minute(Date) + NumberOfMinutes)/60
Date = IncreaseHours(Date, (Minute(Date) + NumberOfMinutes)/60)
EndIf
ProcedureReturn Date(Year(Date), Month(Date), Day(Date), Hour(Date), (Minute(Date) + NumberOfMinutes)%60, Second(Date))
EndProcedure
; Sekunde erhöhen
Procedure IncreaseSecond(Date, NumberOfSeconds = 1)
If (Second(Date) + NumberOfSeconds)/60
Date = IncreaseMinutes(Date, (Second(Date) + NumberOfSeconds)/60)
EndIf
ProcedureReturn Date(Year(Date), Month(Date), Day(Date), Hour(Date), Minute(Date), (Second(Date) + NumberOfSeconds)%60)
EndProcedure
; Datum erhöhen
Procedure IncreaseDate(Date, NumberOfYears = 0, NumberOfMonths = 0, NumberOfDays = 0, NumberOfHours = 0, NumberOfMinutes = 0, NumberOfSeconds = 0)
If NumberOfYears
Date = IncreaseYears(Date, NumberOfYears)
EndIf
If NumberOfMonths
Date = IncreaseMonths(Date, NumberOfMonths)
EndIf
If NumberOfDays
Date = IncreaseDays(Date, NumberOfDays)
EndIf
If NumberOfHours
Date = IncreaseHours(Date, NumberOfHours)
EndIf
If NumberOfMinutes
Date = IncreaseMinutes(Date, NumberOfMinutes)
EndIf
If NumberOfSeconds
Date = IncreaseSecond(Date, NumberOfSeconds)
EndIf
ProcedureReturn Date
EndProcedure