Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: stussy am 12.04.05 - 14:05:01
-
Hi,
ich habe ein kleines Problem und hoffe das mir hier jemand helfen kann.
Es geht um folgendes:
Ich habe einen Agenten, der sich ein Datum holt und solange 2 Monate draufzählt, bis das Datum in der Zukunft liegt.
Soweit sogut...
Jetzt ist mir aufgefallen das in meinem Script im Februar ein Fehler auftritt.
Beispiel:
StartDatum: 31.12.2004
+ 2 Monate = 28.02.2005
+ 2 Monate = 28.04.2005 (statt 30.04.2005!!!) :-\
Hier ist mal ein Teil aus dem Agenten:
If Status = "läuft" And Cdat(AblaufKD.DateOnly) < Today And TurnusAktiv = "ja" Then
Dim Ablauf As New NotesDateTime(Cstr (doc.datVTAblauf(0)))
Do Until Cdat(Ablauf.DateOnly) > Today
Turnus = Cint(doc.numVTKuendTurnus(0))
Call Ablauf.AdjustMonth(Turnus)
doc.datVTAblauf = Ablauf.DateOnly
Ablaufdatum = Ablauf.DateOnly
Loop
End If
Bitte helft mir :)
Danke
-
Hallo,
da kann man nur tricksen. Wenn es immer der letzte Tag das Monats sein soll musst mann sich das neue Datum zusammensetzen. Drei Monate addieren, dann Tag auf 01 setzen. Davon dann einen Tag abziehen.
Also
28. Februar 05 + 3 Monate
-> 28. Mai 2005 auf ersten Tag setzen
-> 01. Mai 2005 einen Tag abziehen
-> 30. April 2005
Ist ein wenig Aufwand, aber immer noch besser als mit dem 28. 29. 30. oder 31. einen Monats zu rechnen.
Gruß Bastel123
-
Soviel Aufwand ist das gar nicht, Bastel. Vor allem kann man dabei auf das Dealen mit der NotesDateTime class verzichten. Man kann alles mit Variants vom Typ 7 (DATETIME) machen.
- StartDate holen und Variant zuweisen
- Mit DateNumber den ersten Tag des Monats bilden und dabei gleich x Monate daraufzählen.
- Vom Zieldatum (Variant !) einfach 1 abziehen - das wäre der letzte des betreffenden Vormonats.
A-Bär: "stussy" will m.E. gar nicht immer den letzten des Monats haben - er hat sein Problem MIT dem Ultimo, wenn sein StartDate denn darauf fällt. Sein Problem ist: Er verändert permanent das Ausgangsdatum, vielmehr müsste es heissen (und hier durchaus mit der NotesDateTime class):
- Ausgangsdatum nehmen, plus zwei Monate -> prüfen, ob er über dem Limitdatum ist.
- Wenn nicht, Ausgangsdatum (!) nehmen, jetzt plus vier Monate (das muss also die Schleifenvariable sein) und wieder prüfen.
Was ich an seiner Lösung aber für arg gefährlich halte, ist das Speichern der Datumswerte in Textfeldern. Über kurz oder lang führt das zum "big Bang" (da braucht nur mal das OS eines beteiligten Computers auf ein anderes Datumsformat umgestellt werden ...). Datums-/Zeitwerte gehören meines Erachtens immer in Datums-/Zeitfelder. Für die Anzeige oder andere unkritische Aufgaben kann man dann ja on the fly immer noch in Text ändern.
Bernhard