Domino 9 und frühere Versionen > ND7: Entwicklung
Monate innerhalb einer Range zwischen zwei Datumsfeldern anzeigen
thomino:
Ich habe folgendes Problem:
In einer Maske gibt es ein Startdatum und ein Enddatum. In einem weiteren berechneten Feld möchte ich nun die Werte der jeweiligen Monate (mit dem Jahreswert) angezeigt bekommen.
Beispiel:
Startdatum 15.11.2010
Enddatum 09.02.2011
Das berechnete Feld soll nun anzeigen: 201011;201012;201101;201102
Mein erster Gedanke war, das Datum auseinanderzupflücken und per while-Schleife immer einen Monat draufzugeben.
n:=1;
@while(jahrmonat_start<jahrmonat_end;jahrmonat_start+n;
n:=n+1)
Aber
1. Habe ich es nicht hinbekommen
2. Würde dabei der Jahreswechsel nicht berücksichtigt werden.
Bin ich generell auf dem richtigen Weg oder gibt es da eine elegantere Lösung, an der ich vorbeidenke?
Viele Grüße
Thomas
Keydins:
Moin Thomas,
da ich auch des öfteren mit Datumsbereichen arbeiten muss, habe ich mir dein Problem kurz nachgebaut.
2 Felder mit Datumsauswahl (Start & Ende) und ein berechnetes mit der Ausgabe 'JahrMonat' durch folgende Formel:
_start := @Text(Start);
_ende := @Text(Ende);
_duration := _start + " - " + _ende;
_dateDurr := @Date(@TextToTime(_duration));
_startend := @Explode(_dateDurr);
_anzahl := @Elements(_startend);
_listeDat := @Right(_startend[1];7);
_finalList := "";
_finalList := @Right(@Right(_startend[1];7);4) + @Left(@Right(_startend[1];7);2) + "#";
n := 2;
@While(n <= _anzahl;
@Do(
_readDat := @Right(_startend[n];7);
@If(
@Left(_listeDat;2) = @Left(_readDat;2);
"";
@Do(
_finalList := _finalList + @Right(@Right(_startend[n];7);4) + @Left(@Right(_startend[n];7);2) + "#";
_listeDat := @Right(_startend[n];7)
)
)
);
n := n + 1);
@Explode(_finalList;"#")
Ist auf die schnelle gestrickt und kann sicherlich an der ein oder anderen Stelle noch optimiert werden.
Gruß
Dirk
thomino:
Hi Dirk,
PERFEKT!
Danke für die schnelle Hilfe.
Thomas
kawie:
Weil ich eh mal wieder ein wenig mit Formeln rumspielen wollte...
Wie wäre es damit ?
_tempdate := @Date(startdate);
@If( @Month(enddate)<10;_var2 := @TextToNumber(@Text(10*@Year(enddate)) + @Text(@Month(enddate)));_var2 := @TextToNumber(@Text(@Year(enddate)) + @Text(@Month(enddate))));
@If(@Month(startdate )<10;_var := @TextToNumber(@Text(10 * @Year(startdate ))+ @Text(@Month(startdate ))); _var := @TextToNumber(@Text(@Year(startdate )) + @Text(@Month(startdate))));
_list := "";
@While(_var <= _var2;
@If (_list= ""; _list:= @Text(_var);_list :=_list + "," + @Text(_var));
_tempdate := @Adjust(_tempdate;0;1;0;0;0;0);
@If(@Month(_tempdate )<10;_var := @TextToNumber(@Text(10 * @Year(_tempdate ) )+ @Text(@Month(_tempdate ))); var := @TextToNumber(@Text(@Year(_tempdate )) + @Text(@Month(_tempdate )))));
@Prompt([Ok];"Test";@Text(_list));
Tim Pistor:
liste := @Date( @Year(startDatum); @Month(startDatum) ; 1);
ende := @Date( @Year(endDatum); @Month(endDatum) ; 1);
tmpDatum := @Adjust(liste; 0; 1;0;0;0;0);
@While( tmpDatum <= ende ; liste := (liste : tmpDatum) ; tmpDatum := @Adjust( tmpDatum; 0;1;0;0;0;0) );
@Transform(liste ; "item"; @Text(@Year( item)) + @Right( "0" + @Text(@Month(item)); 2))
Edit : noch ein bisschen gekürzt
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln