Domino 9 und frühere Versionen > ND9: Entwicklung

Nächste Wochentage ausgehend von heute berechnen

<< < (2/4) > >>

Peter Klett:
Fast


--- Code: ---NächsterMontagTmp := @If(2 - @Weekday (@Today) <= 0 ; 2 - @Weekday (@Today) + 7 ; 2 - @Weekday (@Today))
NächsterMontag := (@Adjust (@Today; 0; 0; NächsterMontagTmp ; 0; 0; 0))

NächsterDienstagTmp := @If(3 - @Weekday (@Today) <= 0 ; 3 - @Weekday (@Today) + 7 ; 3 - @Weekday (@Today))
NächsterDienstag := (@Adjust (@Today; 0; 0; NächsterDienstagTmp ; 0; 0; 0))

usw...

--- Ende Code ---

und ich würde nie Umlaute in Formel- oder Scriptvariablen verwenden, also NaechsterDienstag

Könnte man auch noch etwas eleganter schreiben, damit nicht soviel gerechnet werden muss ...



--- Code: ---NaechsterMontagTmp1 := 2 - @Weekday (@Today);
NaechsterMontagTmp2 := @If(NaechsterMontagTmp1 <= 0 ; NaechsterMontagTmp1 + 7 ; NaechsterMontagTmp1);
NaechsterMontag := (@Adjust (@Today; 0; 0; NaechsterMontagTmp2 ; 0; 0; 0))

--- Ende Code ---

theBastian:

--- Zitat von: Peter Klett am 17.10.16 - 17:05:03 ---
und ich würde nie Umlaute in Formel- oder Scriptvariablen verwenden, also NaechsterDienstag


--- Ende Zitat ---

Ist klar, die Bezeichnung war ja auch nur dafür gedacht, darzustellen, was rauskommen soll.  ;)

Wären also 3 Zeilen pro Tag. Könnte man das noch irgendwie optimieren?

Peter Klett:
Ein bißchen kürzer ;)


--- Code: ---_w := @Modulo ((1 : 2 : 3 : 4 : 5 : 6 : 7) - @Weekday (@Today) + 6; 7) + 1;
@For (_i := 1; _i <= @Elements (_w); _i := _i + 1;
@Set ("_n" + @Text (_i); @Adjust (@Today; 0; 0; _w [_i]; 0; 0; 0))
);
@Prompt ([Ok]; "Nächste Tage"; @Implode (@Text (_n1 : _n2 : _n3 : _n4 : _n5 : _n6 : _n7); ", "))

--- Ende Code ---

Anstelle von @Set kannst Du auch mit @Setfield die Werte gleich in Felder/Items des Dokuments schreiben, das obere Beispiel ist zum Testen ohne Veränderung irgendwelcher Dokumente, das untere zum Schreiben der Felder Tag1 bis Tag7, wobei Tag1 der nächste Sonntag ist.


--- Code: ---_w := @Modulo ((1 : 2 : 3 : 4 : 5 : 6 : 7) - @Weekday (@Today) + 6; 7) + 1;
@For (_i := 1; _i <= @Elements (_w); _i := _i + 1;
@SetField ("Tag" + @Text (_i); @Adjust (@Today; 0; 0; _w [_i]; 0; 0; 0))
);

--- Ende Code ---

Die wesentliche Änderung ist die Nutzung des @Modulo, das den Rest einer Teilung ergibt. Damit spart man die Abfrage, ob z.B. 2 - Weekday kleiner gleich 0 ist. Und alle Operationen werden auf einer Liste von Daten ausgeführt, was in Formelsprache sehr elegant ist.

koehlerbv:
Ja, das geht in drei Zeilen für alles.

Zeile 1:
Eine Liste der gewünschten Daten bilden. Hierzu brauchst Du @Explode und @TextToTime und eine scheinbar ungewöhnliche Nutzung der extrem starken Listenbearbeitung in der Formelsprache. Heraus kommt folgendes:
@Explode (@TextToTime (@Text (@Adjust (@Today; 0; 0; 1; 0; 0; 0)) + " - " + @Text (@Adjust (@Today; 0; 0; 7; 0; 0; 0))))
Achtung: Das ergibt als Rückgabewert ein Stringarray, zur Weiterverarbeitung brauchst Du also wieder @TextToTime!

Zeile 2:
Über die Ergebnisliste ein @WeekDay. Das kann natürlich auch gleich verwurschtet werden mit Zeile 3, dann hast Du einen Zweizeiler.

Zeile 3:
Wenn Du Wochentage als String brauchst, kannst Du das wieder über die ganze Liste aus Zeile 2 mit @Replace (und @Text!) machen oder mit @Word - das Resultat ist identisch.

Irgendwelche Abfrage auf einen "Overflow" des Wochentages (also grösser Samstag) entfällt, da wir nur pur mit den ermittelten Daten arbeiten. Nix mit Modulo oder so - man muss es ja nicht übertreiben, wenn man in Mathe schwach auf der Brust ist  ;)


HTH,
Bernhard

Tim Pistor:
Abendliche Formelrätsel....  ;D


--- Code: ---dLst := "Sonntag" : "Montag" : "Dienstag" : "Mittwoch" : "Donnerstag" : "Freitag" : "Samstag" ;
@Transform(
@TextToTime(@Explode(@TextToTime(@Text(@Adjust(@Today;0;0;1;0;0;0)) + "-" + @Text(@Adjust(@Today;0;0;7;0;0;0)))));
"item";
dLst[@Weekday( item )] + " " + @Text(@Date(item))
) ;
--- Ende Code ---

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln