Seite 1 von 1
Umwandeln eines Datums
Verfasst: 19.10.2006 18:18
von dysti
Hallo,
irgendwie schaffe ich das mit dem Umwandeln des Datums nicht.
Was mache ich falsch.
Code: Alles auswählen
Procedure Test(jahr)
Dim feiertag(1)
datum$=FormatDate("%dd.%mm.%yyyy", Date(Jahr,12,26,0,0,0))
feiertag(5)=datum
ProcedureReturn feiertag(1)
EndProcedure
;Rückgabe der Procedure
datum=test(2006)
datum +1
MessageRequester("Ausgabe des Datums",datum$)
;Es sollte jetzt der 27.12.2006 ausgegeben werden
Verfasst: 19.10.2006 18:22
von #NULL
#
du greifst auf feiertag(5) zu, aber feiertag(5) gibt es nicht, weil du
mit..
Dim feiertag(1)
..einen array von feiertag(0) bis feiertag(1) definiert hast.
<edit>
#
außerdem ist 'datum$' eine variable vom typ string. 'datum' jedoch ist eine andere variable (vom typ long), welche 0 enthält.
#die zuweisung zu feiertag(n) kann auch nur gehen, wenn dein array vom typ string ist.
#
wenn du den (string-)wert dann aus der procedure dann zurückgeben willst, mußt du erst den rückgabetyp der procedure mit string deklarieren.
#
wenn du aber dann im unteren hauptteil deines codes, diesen wert in eine variable packen wilsst, muß auch diese vom typ string sein.
#
und diese variable dann mit datum$+1 zu inkrementieren, ist unfug.
#
....
alles in allem ziemlich viel unfug, für so wenig code.
<edit2:>
#
und im messagerequester muß der typ, bzw die variable auch noch stimmen.
hab deinen knetbatzen mal zur kompilierbarkeit verformt:
Code: Alles auswählen
Procedure.s Test(jahr)
Dim feiertag.s(1)
datum$=FormatDate("%dd.%mm.%yyyy", Date(Jahr,12,26,0,0,0))
feiertag(1)=datum$
ProcedureReturn feiertag(1)
EndProcedure
;Rückgabe der Procedure
datum.s=test(2006)
;datum +1
MessageRequester("Ausgabe des Datums",datum)
;Es sollte jetzt der 27.12.2006 ausgegeben werden
Verfasst: 19.10.2006 18:43
von roherter
Habe die Procedure mal n bischen umgestellt ,weiß zwar nicht was du damit vor hast aber egal.
Code: Alles auswählen
Procedure.s Test(jahr,plusday)
Dim feiertag.s(10)
datum$=FormatDate("%dd.%mm.%yyyy", Date(jahr,12,26+plusday,0,0,0))
feiertag(5)=datum$
ProcedureReturn feiertag(5)
EndProcedure
;Rückgabe der Procedure
datum$=Test(2006,1)
MessageRequester("Ausgabe des Datums",datum$)
;Es sollte jetzt der 27.12.2006 ausgegeben werden
Verfasst: 19.10.2006 18:44
von Kaeru Gaman
ich frag mich, wozu da überhaupt ein array rein soll... o_O
Verfasst: 19.10.2006 20:48
von dysti
#NULL: Da kommt aber keine 27 raus sondern 26.
Die Procedure gibt ein Datum zurück, was ich im Array vorbelegt habe.
Es handelt sich nicht nur um ein Datum sondern um mehrere Datumswerte.
Nachdem ich das Datum geholt habe soll zu diesem Datum eine bestimmte Anzahl Tage hinzu oder abgezogen werden.
Das mit dem Messagerequester habe ich nur zur Kontrolle gemacht, was zurückgegeben wird. Wenn das was #NULL gemacht hat auch dann 27 herauskommen würde, wäre das die Lösung.
Weiß einer einen Link, wie das rechnen mit Datumwerten und Typumwandlung funzt. Mit der Hilfe komme ich irgendwie nicht weiter.
Danke schon mal für die Vorschläge.
roherter: dein Lösungsansatz ist auch gut. Lasse mir das mal durch den Kopf gehen. Vielleicht muß ich anders denken.
Verfasst: 19.10.2006 21:04
von KeyPusher
wandel dein datum in sekunden um, rechenr tage*24*60*60 dazu und wandel es zurück in was datumähnlichem.
Code: Alles auswählen
datum$=formatdate(maske$,Date(yyyy,mm,tt,hh,ii,ss)+86400*tage)
Verfasst: 19.10.2006 21:11
von Kaeru Gaman
nuja war halt nich ersichtlich.
du solltest das array static machen, und nur beim ersten aufruf füllen.
sonst kannste auch aufs array verzichten, und direkt aus DATAs lesen.
beim hinzuzählen oder abziehen musst du mit einem numerischen wert arbeiten.
bei deinem beispiel wäre es nicht nur wichtig, dass für plusday=1 ne 27 raus kommt,
sondern dass für plusday=7 das ergebnis jahr+1,1,2 lautet.
also musst du plusday außerhalb der Date()-funktion addieren,
und dafür musst du plusday in sekunden umrechnen.
..ok, letzteres hat keypusher inzwischen schon geschrieben...
Verfasst: 20.10.2006 09:22
von dysti
Hier meine Lösung zu #NULL:
Code: Alles auswählen
Procedure.s Test(Jahr)
Dim feiertag.s(1)
datum$=FormatDate("%dd.%mm.%yyyy", Date(Jahr,12,26,0,0,0))
feiertag(1)=datum$
ProcedureReturn feiertag(1)
EndProcedure
;Rückgabe der Procedure
datum.s=Test(2006)
neutag = AddDate(ParseDate("%dd.%mm.%yyyy", datum), #PB_Date_Day, 1)
neutag2 = AddDate(ParseDate("%dd.%mm.%yyyy", datum), #PB_Date_Day, -1)
MessageRequester("Ausgabe des Datums ausgehend vom 26.12.",FormatDate("%dd.%mm.%yyyy",neutag)+ " " + FormatDate("%dd.%mm.%yyyy",neutag2))
; in ein String wandeln
; FormatDate("%dd.%mm.%yyyy",neutag)
; in ein reguläres Datum wandeln
; ParseDate("%dd.%mm.%yyyy", "31.05.2005")
; Tage zum Datum addieren oder subtrahieren
; tag = AddDate(datum, #PB_Date_Day, 2) ; plus 2 Tage
; tag = AddDate(datum, #PB_Date_Day, - 2); minus 2 Tage