Autor Thema: Nächste Wochentage ausgehend von heute berechnen  (Gelesen 4217 mal)

Offline theBastian

  • Senior Mitglied
  • ****
  • Beiträge: 482
  • Geschlecht: Männlich
Hallo allerseits,

ich muss die nächsten Wochentage berechnen, habe mir dazu schon einige Threads durchgelesen, allein mir fehlt das Verständnis, wie man sowas berechnet.
Klingt für mich alles sehr nach Mathematik und da war ich schon immer schlecht.  :(

Ausgehend von Heute (@Today) muss ich die nächsten Wochentage berechnen und einzeln ausgeben, also

NächsterMontag : NächsterDienstag : NächsterMittwoch : ....

Mit @Weekday kriege ich den aktuellen Tag aber wie komme ich auf die anderen?  ???

Danke Euch schon mal.
Sebastian
Domino, Notes, Sametime

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Nächste Wochentage ausgehend von heute berechnen
« Antwort #1 am: 17.10.16 - 15:36:17 »
Mal so hingewürfelt, vielleicht hilft Dir das

Code
_liste := "Sonntag" : "Montag" : "Dienstag" : "Mittwoch" : "Donnerstag" : "Freitag" : "Samstag";
_n := @Prompt ([OKCancelList] : [NoSort]; "Nächster"; "Wählen Sie bitte den Tag aus"; ""; _liste);
@If (_n = ""; @Return (""); "");
_n1 := @If (_n = "Sonntag"; 1; _n = "Montag"; 2; _n = "Dienstag"; 3; _n = "Mittwoch"; 4; _n = "Donnerstag"; 5; _n ="Freitag"; 6; _n ="Samstag"; 7; 0);
_n2 := _n1 - @Weekday (@Today);
_n3 := @If (_n2 <= 0; _n2 + 7; _n2);

@Prompt ([OK]; "Nächster" + _n; @Text (@Adjust (@Today; 0; 0; _n3; 0; 0; 0)))

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Nächste Wochentage ausgehend von heute berechnen
« Antwort #2 am: 17.10.16 - 15:55:17 »
oder meinst Du die Liste der nächsten Wochentage ab heute im Klartext?

Code
_liste := "Sonntag" : "Montag" : "Dienstag" : "Mittwoch" : "Donnerstag" : "Freitag" : "Samstag";
_w := @Weekday (@Today);
_n := @If (_w = 7; _liste; @Subset (_liste; _w - 7) : @Subset (_liste; _w));

@Prompt ([Ok]; "Nächste Tage"; @Implode (_n; ", "))

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Nächste Wochentage ausgehend von heute berechnen
« Antwort #3 am: 17.10.16 - 16:06:34 »
Hallo,

Und was ist mit @Adjust?


Andreas

Offline theBastian

  • Senior Mitglied
  • ****
  • Beiträge: 482
  • Geschlecht: Männlich
Re: Nächste Wochentage ausgehend von heute berechnen
« Antwort #4 am: 17.10.16 - 16:45:32 »
Danke erst mal Peter:

Würde also bedeuten:

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

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

usw...


@Andreas: @Adjust ist doch da drin, oder?
Domino, Notes, Sametime

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Nächste Wochentage ausgehend von heute berechnen
« Antwort #5 am: 17.10.16 - 17:05:03 »
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...

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))

Offline theBastian

  • Senior Mitglied
  • ****
  • Beiträge: 482
  • Geschlecht: Männlich
Re: Nächste Wochentage ausgehend von heute berechnen
« Antwort #6 am: 17.10.16 - 21:01:46 »

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


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?
« Letzte Änderung: 17.10.16 - 21:10:53 von theBastian »
Domino, Notes, Sametime

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Nächste Wochentage ausgehend von heute berechnen
« Antwort #7 am: 17.10.16 - 22:12:10 »
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); ", "))

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))
);

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.
« Letzte Änderung: 17.10.16 - 22:20:36 von Peter Klett »

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Nächste Wochentage ausgehend von heute berechnen
« Antwort #8 am: 17.10.16 - 22:17:37 »
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

Offline Tim Pistor

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • Geschlecht: Männlich
    • www.pistor.is - Tim Pistor IT-Beratung
Re: Nächste Wochentage ausgehend von heute berechnen
« Antwort #9 am: 17.10.16 - 22:30:56 »
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))
) ;
« Letzte Änderung: 17.10.16 - 22:36:17 von Tim Pistor »

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Nächste Wochentage ausgehend von heute berechnen
« Antwort #10 am: 17.10.16 - 22:38:22 »
Abendliche Formelrätsel....  ;D
Ja, besser als Fernsehen ...

Spannend ist nun, was wirklich gebraucht wird. Bei Euren Ergebnislisten ist das erste Element immer der nächste Tag (bzw. nur die Liste der Wochentage), wenn man daraus z.B. den nächsten Donnerstag ermitteln möchte, muss man durch alle Tage durchlaufen, bis man den gefunden hat. Bei mir ist das immer _n5 oder Tag5. So ganz klar ist mir die Aufgabenstellung allerdings diesbezüglich nicht, wobei meine Alternative zur Darstellung der folgenden Wochentage keine Resonanz gefunden hat, also vermutlich nicht das Gewünschte ist ...
« Letzte Änderung: 17.10.16 - 22:41:50 von Peter Klett »

Offline theBastian

  • Senior Mitglied
  • ****
  • Beiträge: 482
  • Geschlecht: Männlich
Re: Nächste Wochentage ausgehend von heute berechnen
« Antwort #11 am: 18.10.16 - 08:19:56 »
Guten Morgen allerseits,

erst mal Danke für die vielen Antworten. Da es noch ein wenig unklar ist, was ich brauche, versuche ich das noch mal genauer zu beschreiben.

Ein Mitarbeiter soll einen Liefertermin festlegen. Er kann aber nur an bestimmten Tagen beliefert werden. Diese Tage liegen als Textliste vor.
Beispiel 2:4 = mögliche Liefertermine sind Montag und Mittwoch.
Zwischen Bestellungtag (heute) und Liefertag müssen mindestens zwei Tage liegen (Wochenende nicht berechnen), also ausgehend von heute + 2 Tage sind das der kommende Montag und der kommende Mittwoch.
In einer Dialogliste soll er also diese zwei Werte sehen und einen auswählen können.

Ich dachte also, dass ich mir erst mal alle möglichen zukünftigen Wochentage ausgehend von heute + 2 berechne und dann eine Liste baue:

Code
NaechsterMontag := 
NaechsterDienstag :=
NaechsterMittwoch := 

@If(@Contains(Textliste ; 2 ; NaechsterMontag ; "") :
@If(@Contains(Textliste ; 3 ; NaechsterDienstag ; "") :
@If(@Contains(Textliste ; 4 ; NaechsterMittwoch ; "") ...
« Letzte Änderung: 18.10.16 - 08:25:31 von theBastian »
Domino, Notes, Sametime

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Nächste Wochentage ausgehend von heute berechnen
« Antwort #12 am: 18.10.16 - 08:48:50 »
Code
_liefertage := 2 : 4;
_starttag := @Adjust (@Today; 0; 0; 2; 0; 0; 0);
_w := @Modulo (_liefertage - @Weekday (_starttag) + 6; 7) + 1;
@For (_i := 1; _i <= @Elements (_w); _i := _i + 1;
	_liste := _liste : @Text (@Adjust (_starttag; 0; 0; _w [_i]; 0; 0; 0))
);
_liste := @Trim (_liste);
_ergebnis := @Prompt ([OkCancelList]; "Liefertag"; "Wählen Sie bitte den Liefertag aus"; _liste [1]; _liste)

Es gibt hier aber nicht immer fertige Lösungen, das hier hat einfach mal Spaß gemacht ;)

EDIT: Das mit dem nicht zu berücksichtigenden Wochenende ist da natürlich noch nicht dabei, das müsste bei der Berechnung des _starttag erfolgen ...

EDIT2: Und Du solltest eine Möglichkeit zur Eingabe eines abweichenden Liefertermins schaffen, oder mindestens eine Woche vor Weihnachten in Urlaub gehen  ;D
« Letzte Änderung: 18.10.16 - 09:08:38 von Peter Klett »

Offline Tim Pistor

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • Geschlecht: Männlich
    • www.pistor.is - Tim Pistor IT-Beratung
Re: Nächste Wochentage ausgehend von heute berechnen
« Antwort #13 am: 18.10.16 - 09:14:45 »
Code
dLst := "Sonntag" : "Montag" : "Dienstag" : "Mittwoch" : "Donnerstag" : "Freitag" : "Samstag" ;
start := @Today;
dtList := @Transform( @TextToTime(@Explode(@TextToTime(@Text(@Adjust(start;0;0;@If(@Weekday(start)= 6; 2; @Weekday(start)= 7;1;0) + 3 ;0;0;0)) + "-" + @Text(@Adjust(start;0;0;@If(@Weekday(start)= 6; 2; @Weekday(start)= 7;1;0) + 9;0;0;0))))); 
"item"; 
@Text(@Weekday( item )) + "#" + dLst[@Weekday( item )] + " " + @Text(@Date(item))) ;
@Trim(@Right(dtList ; "2#") : @Right(dtList ; "4#"))

Bisschen "obfuscated" aber kann man ja noch aufdröseln....

Edit: Korrekturen
« Letzte Änderung: 18.10.16 - 09:22:44 von Tim Pistor »

Offline theBastian

  • Senior Mitglied
  • ****
  • Beiträge: 482
  • Geschlecht: Männlich
Re: Nächste Wochentage ausgehend von heute berechnen
« Antwort #14 am: 18.10.16 - 11:44:15 »
Danke Peter, habe ich keine fertige Lösung erwartet. ;)

@Tim: Krass. ;) Schaue ich mir auch an.
Domino, Notes, Sametime

Offline Tim Pistor

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • Geschlecht: Männlich
    • www.pistor.is - Tim Pistor IT-Beratung
Re: Nächste Wochentage ausgehend von heute berechnen
« Antwort #15 am: 18.10.16 - 12:08:14 »
Kann man natürlich schöner (lesbarer) machen...
Wenn einem so ein "Code-Blob" nach ein paar Monaten wieder über den Weg läuft wird man auch erstmal fluchen...  ::)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz