Autor Thema: Monate innerhalb einer Range zwischen zwei Datumsfeldern anzeigen  (Gelesen 3424 mal)

Offline thomino

  • Frischling
  • *
  • Beiträge: 10
  • Geschlecht: Männlich
  • I love YaBB 1G - SP1!
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

Offline Keydins

  • Aktives Mitglied
  • ***
  • Beiträge: 163
  • Geschlecht: Männlich
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
Gruß Dirk

Aktuelle Notesumgebung
~800 BasicClients 9.0.1 FP9 SHF55
  10 FullClients 9.0.1 FP7 SHF143
    7 DominoServer 9.0.1 FP9 HF 139 / 64 Bit

Offline thomino

  • Frischling
  • *
  • Beiträge: 10
  • Geschlecht: Männlich
  • I love YaBB 1G - SP1!
Hi Dirk,

PERFEKT!

Danke für die schnelle Hilfe.

Thomas

Offline kawie

  • Junior Mitglied
  • **
  • Beiträge: 87
  • Ich liebe dieses Forum! Und wie :-)
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));

Offline Tim Pistor

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • Geschlecht: Männlich
    • www.pistor.is - Tim Pistor IT-Beratung
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
« Letzte Änderung: 29.10.10 - 13:15:48 von Tim Pistor »

Offline kawie

  • Junior Mitglied
  • **
  • Beiträge: 87
  • Ich liebe dieses Forum! Und wie :-)
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


Gleiche Idee nur vieeeeel Eleganter als meins :) Auf  @Right( "0" + @Text(@Month(item)); 2)) kam ich irgendwie gar nicht :(

P.S: Du gehst aber aufs ganez Datum das heisst ein
13.10.2010 als Start würde nie das Ergebnis 201011 liefern wenn das Enddatum = 05.11.2010 liefert  oder?
« Letzte Änderung: 29.10.10 - 14:47:38 von kawie »

Offline Tim Pistor

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • Geschlecht: Männlich
    • www.pistor.is - Tim Pistor IT-Beratung
Ich setze in den ersten zwei Zeilen das Datum auf den ersten Tag im Monat - vorher ist mir genau das passiert
was Du beschrieben hast.

offtopic : Wie wäre es mit einem "Formelrätsel" - jede Woche eine andere Aufgabenstellung die per Formel
zu lösen ist? Ich kenne da den ein oder anderen der da mit Sicherheit gute Aufgaben beisteuern könnte :)

Offline Werner Götz

  • Aktives Mitglied
  • ***
  • Beiträge: 248
  • Geschlecht: Männlich
Oder so:
Code
start   := @Date(2010; 12; 22);
ende   := @Date(2021; 2; 27);

@Right((bereich := @Unique(@Right(@Text(@Explode(@TextToTime(@Text(start) + "-" + @Text(ende)))); 7))); 4) + @Left(bereich; 2);

Funktioniert natürlich nur bei deutschem Zeitformat, ansonsten müsste man das entsprechend abändern.

Offline kawie

  • Junior Mitglied
  • **
  • Beiträge: 87
  • Ich liebe dieses Forum! Und wie :-)
offtopic : Wie wäre es mit einem "Formelrätsel" - jede Woche eine andere Aufgabenstellung die per Formel
zu lösen ist? Ich kenne da den ein oder anderen der da mit Sicherheit gute Aufgaben beisteuern könnte :)

Bin ich für :) Meist suche ich mein Heil in LotusScript weil ich Formeln zu wenig im Focus habe. Dabei sind die meist viel
schneller.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz