Domino 9 und frühere Versionen > ND7: Entwicklung

Monate innerhalb einer Range zwischen zwei Datumsfeldern anzeigen

(1/2) > >>

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