Datum zusammensetzen aus mehreren Strings

  • VBScript

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von jvbsl.

    Datum zusammensetzen aus mehreren Strings

    Hallo allerseits,

    Ich schreibe gerade ein Programm, welches anhand mehrerer berechnungen und festgelegter Daten ausgibt ob heute ein Feiertag ist oder nicht. ganz simpel mit True / False
    Mein Problem ist jetzt, dass ich festgelegte Feiertage, die ich einfach nur aus 2 Strings zusammen setze nicht in eine Variable einlesen kann.
    Bei den beweglichen Feiertagen, die sich alle aus dem Osterdatum ergeben, ist das jedoch kein Problem.

    Visual Basic-Quellcode

    1. Jahr = CStr(Year(Date()))
    2. '============================Berechnung statischer Feiertage===============================
    3. ' erster Mai
    4. Mai = 01.05.Jahr
    5. ' Tag der deutschen Einheit
    6. dEinheit = 03.10.Jahr
    7. ' Neujahr
    8. Neujahr = 01.01.Jahr
    9. ' Wheinachtsfeiertage
    10. WEins = 25.12.Jahr
    11. WZwei = 26.12.Jahr


    Wenn ich Jahr durch einen festgelegten String ersetzte wie 2010 liest er das Datum ganz normal ein.

    mein zweites Problem ist jetzt, wenn ich die Feiertage über das Osterdatum berechnen lasse, kann ich dies ja ganz einfach über DateAdd() und DateDiff() machen.
    Beim Karfreitag allerdings (einziger Feiertag mit DateDiff()) bekomme ich jedoch immer nur 0 ausgegeben, bei allen anderen Stimmt das Datum...

    oso steht für das Osterdatum

    Visual Basic-Quellcode

    1. Karfreitag = CStr(DateDiff("d", 2, oso))
    2. Ostermontag = CStr(DateAdd("d", 1, oso))
    3. ChristiHimmelfahrt = CStr(DateAdd("d", 39, oso))
    4. Pfingstmontag = CStr(DateAdd("d", 50, oso))
    5. Fronleichnam = CStr(DateAdd("d", 60, oso))
    Meine Idee bei deiner Aussage wäre jetzt

    Visual Basic-Quellcode

    1. CDate(Mai) = 01.05. & Jahr
    2. ' Oder aber, da ich ja mit Stringoperatoren arbeite
    3. Mai = CStr(01.05. & Jahr)


    Was nunmal leider auch nicht geht.
    Und ich kann das resultat nunmal leider nicht in ein Datum umwandel, solange es nicht zusammengesetzt ist, da halbe daten nunmal nicht umgewandelt werden können.

    Wenn ich dich falsch verstanden habe wäre ich für ein Beispiel sehr dankbar.
    Mai = CDate("01" & "." & "05" & "." & Jahr)
    natürlich muss man die ersten Strings nicht so verknüpfen, man könnte es in einem machen: "01.05." & Jahr
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Meine Erwartung war eigentlich das gleiche Ergebniss wie bei DateAdd(). Bei DateAdd() Wird ja zu dem angegebenen Datum in angabe des Intervalls (d= Tag, yyyy= jahr, q= quartal, m= Monat usw)
    Wenn ich also mit DateAdd() beim intervall d 2 Angebe, rechnet er mir 2 Tage auf mein vorhandenes Datum drauf.
    Bsp.
    DateAdd("d", 1, 04.04.2010) Hierdurch erhalte ich z.B. den Ostermontag.

    Da Karfreitag aber 2 vor Ostern ist, habe ich versucht mit DateDiff("d", 2, 04.04.2010) das Datum einfach 2 Tage zurück zu drehen.
    du meinst also anstatt DateDiff("d", 2, 04.04.2010) soll ich mal DateDiff("d", 04.04.2010, 2) versuchen?
    gleiches ergenis, nur das der Wert negiert wurde.

    Ich werde das Datum jetzt einfach komplett zerlegen mit Day() Month() Year() und dann wenn ich den Tag 2 runter habe wieder zusammen setzen (wo ich ja jetzt auch weiß wie es geht :D)

    Edit:

    Visual Basic-Quellcode

    1. OTag = CStr(Day(oso))
    2. OMonat = Month(oso)
    3. OJahr = Year(oso)
    4. OTag = OTag - 2
    5. Karfreitag = CDate(OTag & OMonat & OJahr)


    Nicht schön, aber es funktioniert

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „AngelOfDeath“ ()

    du müsstest beachten, dass der 01 -2 der 30te oder 29te wäre...
    ich hab mir das ganze mal angeguckt und die DateDiff FUnktion gibt dir einen Long Wert zurück, welchen man wieder in ein Datum konvertiern muss...

    Visual Basic-Quellcode

    1. Dim dt
    2. dt = CDate(DateDiff("d", 2 , CDate("04.04.2010")))
    3. MsgBox(dt)


    und falls noch nicht geschehen, bitte als Erledigt markieren ;)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---