Domino 9 und frühere Versionen > ND9: Entwicklung
Nächste Wochentage ausgehend von heute berechnen
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