datum rechnen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

schalli

Betreff: datum rechnen

BeitragFr, März 13, 2009 15:59
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, März 13, 2009 16:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
Ich abs nicht getestet, aber ich denke mal es funktionier. (Einfach mal testen):
http://blitzbasic.com/codearcs...?code=2088
MFG
 

schalli

BeitragFr, März 13, 2009 18:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Meine Version ( Arrow Ich gehe davon aus, dass der Code BMax war):
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?

Holzchopf

Meisterpacker

BeitragFr, März 13, 2009 18:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielleicht solltest du Parameter, die Strings erwarten, auch als Strings definieren?
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

schalli

BeitragSo, März 15, 2009 10:33
Antworten mit Zitat
Benutzer-Profile anzeigen
@holzchopf: Hab ich gemacht. Jetzt zeigts immer 39886

SpionAtom

BeitragSo, März 15, 2009 13:13
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, März 15, 2009 13:16
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, März 15, 2009 13:20
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, März 15, 2009 13:45
Antworten mit Zitat
Benutzer-Profile anzeigen
@Nicdel: da fehlt was: BeginYear = 1900

EDIT: @SpionAtom: Stimmt. Ich habe am 7.11.2009 und nicht etwa in 8 Tagen Geburtstag.

Nicdel

BeitragSo, März 15, 2009 13:50
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, März 15, 2009 13:59
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, März 17, 2009 20:27
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Razz
 

schalli

BeitragMi, März 18, 2009 22:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Jipie Exclamation Mein Geburtstag ist wieder richtig... -> sieht gut aus

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group