datum rechnen
Übersicht

schalliBetreff: datum rechnen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich möchte gerne den Abstand von zwei Daten (tt.mm.jjjj) berechnen in Tagen. Ich hab gestern recht lange gegrübelt und hatte ein paar Ideen, aber die haben alle nicht funktioniert. Kennt jemand einen Code oder hat einen Denkanstoß? | ||
![]() |
Starwar |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
Ich abs nicht getestet, aber ich denke mal es funktionier. (Einfach mal testen): http://blitzbasic.com/codearcs...?code=2088 MFG |
||
schalli |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Meine Version ( ![]() Code: [AUSKLAPPEN] Dim Dag(24)
Dim Maand(12) Global YearStartPoint=0 Global MonthCount=0 Global TotalDays=0 Global TempVar=0 Global BeginYear=1900 Restore dag_data For i = 1 To 24 Read Dag(i) Next Restore maand_data For i = 1 To 12 Read Maand(i) Next Print DaysInBetween("","12 Aug 2011",True) WaitKey Function DaysInBetween(SomeDate,SomeDate2,Absolute=True) If SomeDate="" Then SomeDate = CurrentDate$() End If If Somedate2="" Then SomeDate2 = CurrentDate$() End If If Absolute=True Then Return Abs(DayNumber(SomeDate2)-DayNumber(Somedate)) Else Return (DayNumber(SomeDate2)-DayNumber(Somedate)) End If End Function Function DayNumber(SomeDate) If SomeDate="" Then SomeDate = CurrentDate$() End If Jaar=Int(Right$(SomeDate,4)) If ((Jaar Mod 4) = 0 And (Jaar Mod 100) <> 0) Or ((Jaar Mod 4) = 0 And (Jaar Mod 400) = 0) Then YearStartPoint=12 Else YearStartPoint=0 End If For TempVar=0 To 11 If Upper(Mid$(SomeDate,4,3))=maand(TempVar) Then MonthCount=TempVar Exit End If Next For Tempvar=0 To MonthCount-1 TotalDays=TotalDays+dag(TempVar+YearStartPoint) Next TotalDays=TotalDays+Int(Left$(SomeDate,2)) If jaar > BeginYear Then For TempVar=BeginYear To jaar-1 If ((TempVar Mod 4) = 0 And (Tempvar Mod 100) <> 0) Or ((tempvar Mod 4) = 0 And (Tempvar Mod 400) = 0) Then Totaldays=Totaldays+366 Else TotalDays=Totaldays+365 End If Next End If Return TotalDays End Function .dag_data Data 31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31,30,31 .maand_data Data "JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC" Klappt leider nicht -> zeigt immer 0 an Hab ich was falsch gemacht? |
||
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielleicht solltest du Parameter, die Strings erwarten, auch als Strings definieren? | ||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
schalli |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@holzchopf: Hab ich gemacht. Jetzt zeigts immer 39886 | ||
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ist das richtig, dass deine Globals beim Functionsaufruf nicht mehr resettet werden?
Und warum sind es globals? Sie werden nur ein einer Funktion verwendet. |
||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Folgender Code funktioniert bei mir:
Code: [AUSKLAPPEN] Dim Dag(24) Dim Maand(12) Restore dag_data For i = 1 To 24 Read Dag(i) Next Restore maand_data For i = 1 To 12 Read Maand(i) Next Print DaysInBetween("11 Aug 2011","12 Aug 2011",True) WaitKey Function DaysInBetween(SomeDate$,SomeDate2$,Absolute=True) If SomeDate="" Then SomeDate = CurrentDate$() End If If Somedate2="" Then SomeDate2 = CurrentDate$() End If If Absolute=True Then Return Abs(DayNumber(SomeDate2)-DayNumber(Somedate)) Else Return (DayNumber(SomeDate2)-DayNumber(Somedate)) End If End Function Function DayNumber(SomeDate$) If SomeDate="" Then SomeDate = CurrentDate$() End If Jaar=Int(Right$(SomeDate,4)) If ((Jaar Mod 4) = 0 And (Jaar Mod 100) <> 0) Or ((Jaar Mod 4) = 0 And (Jaar Mod 400) = 0) Then YearStartPoint=12 Else YearStartPoint=0 End If For TempVar=0 To 11 If Upper(Mid$(SomeDate,4,3))=maand(TempVar) Then MonthCount=TempVar Exit End If Next For Tempvar=0 To MonthCount-1 TotalDays=TotalDays+dag(TempVar+YearStartPoint) Next TotalDays=TotalDays+Int(Left$(SomeDate,2)) If jaar > BeginYear Then For TempVar=BeginYear To jaar-1 If ((TempVar Mod 4) = 0 And (Tempvar Mod 100) <> 0) Or ((tempvar Mod 4) = 0 And (Tempvar Mod 400) = 0) Then Totaldays=Totaldays+366 Else TotalDays=Totaldays+365 End If Next End If Return TotalDays End Function .dag_data Data 31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31,30,31 .maand_data Data "JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC" |
||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
Klappt nicht, Nicdel: Demnach hätte ich in 12 Tagen Geburtstag, und ich hab erst im November geburtstag.
Da muss ein Fehler im Algo sein, den der Ursprungscode gibt auch 12 aus, wenn man die Globals in der Funktion wieder auf 0 setzt. |
||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
schalli |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@Nicdel: da fehlt was: BeginYear = 1900
EDIT: @SpionAtom: Stimmt. Ich habe am 7.11.2009 und nicht etwa in 8 Tagen Geburtstag. |
||
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ihr habt recht... Ich habs nur mit 8 August und 12 August probiert. | ||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
schalli |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Aber selbst wenn man BeginYear machen würde, wäre mein Geburtstag in 67 Tagen, also in ungefähr zwei Monaten. Er ist aber im November und nicht im Mai. | ||
onkelz89 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi,
hatte sowas in der Art schonmal für ein Game gemacht.... Code: [AUSKLAPPEN] Tag=5
Monat=1 JahrN=2008 Global JahrR# Global momdate$=Tag+"."+Monat+"."+JahrN Global enddate$="5.1.2009" While momdate<>enddate If Tag<28 Then Tag=Tag+1 Else If Monat<>2 Then If Monat=1 Or Monat=3 Or Monat=5 Or Monat=7 Or Monat=8 Or Monat=10 Or Monat=12 Then If Tag<31 Then Tag=Tag+1 Else Tag=1 Monat=Monat+1 EndIf Else If Tag<30 Then Tag=Tag+1 Else Tag=1 Monat=Monat+1 EndIf EndIf Else Schaltjahr#=JahrR#/4 If RSet(Schaltjahr#,1)<>0 Then If Tag<28 Then Tag=Tag+1 Else Tag=1 Monat=Monat+1 EndIf Else If Tag<29 Then Tag=Tag+1 Else Tag=1 Monat=Monat+1 EndIf EndIf EndIf EndIf If Monat>12 Then Monat=1 JahrN=JahrN+1 JahrR#=JahrR#+1 EndIf momdate=Tag+"."+Monat+"."+JahrN zahl=zahl+1 Wend Print zahl+" Tage sind dazwischen!" WaitKey Ist nicht optimiert, sollte aber laufen... MfG EDIT: Bei der Angabe des Datums zB 01.03.1902 bei Tag + Monat die Null weglassen => 1.3.1902 sonst kommt ne Endlos-Schleife... Gerade mal die Tage seit der Zeitrechnung (01.01.0000) gezählt => 733.863 ... wen´s interessiert ![]() |
||
schalli |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Jipie ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group