Seite 1 von 1

erster/letzter Tag einer Woche [ERLEDIGT]

Verfasst: Fr, 04. Okt 2019 18:09
von Manfred
hich habe über Week() die Woche des Jahres. Jetzt würde ich gerne herausfinden, wie das Anfangs/Enddatum der jeweiligen Woche lautet. Gibt es da schon etwas fertiges zu, oder wie geht man da am besten vor? Ok, man kann eine Schleife bilden, die rauf und runter läuft, aber das wäre ja zu einfach. :lol:

Re: erster/letzter Tag einer Woche

Verfasst: Fr, 04. Okt 2019 18:27
von georg
Hallo, Manfred -


das wirst Du wohl selbst programmieren müssen, nicht zuletzt, da nicht klar ist, welcher Wochentag welcher ist.

Geht man von Mittwoch (= Mitte der Woche) aus, dann wäre der erste Tag der Sonntag, und der Samstag der letzte Tag. Schaut man sich die (meisten) Kalender dann, dann beginnt dort die Woche mit dem Montag und endet mit dem Sonntag.

Du brauchst also neben der reinen Berechnung auch einen Parameter für das "Koordinatensystem".

Re: erster/letzter Tag einer Woche

Verfasst: Fr, 04. Okt 2019 20:20
von Wolfgang Ciriack
Zusammen mit dow(date()) ist das doch ziemlich einfach :D

Re: erster/letzter Tag einer Woche

Verfasst: Fr, 04. Okt 2019 20:23
von Manfred
?

Re: erster/letzter Tag einer Woche

Verfasst: Fr, 04. Okt 2019 20:24
von Tom
1 ist Sonntag, 7 Samstag. Die Funktionen BoW() und EoW() sind Zweizeiler.

Re: erster/letzter Tag einer Woche

Verfasst: Fr, 04. Okt 2019 20:26
von Wolfgang Ciriack
Ok. ich dachte du ermittelst die week selber, aber ich denke, du hast die vorgegeben ?

Re: erster/letzter Tag einer Woche

Verfasst: Fr, 04. Okt 2019 20:30
von Manfred
ich habe ein Datum und ermittel daraus die Woche. Aber anders gesehen ist das ja Blödsinn. Wenn ich das Datum habe, brauche ich ja nicht die Woche. Ich kann ja daraus ermitteln wo ich stehe und wie weit ich vor und zurück muß.
Aber andersherum, ich bekomme eine Wochennummer und müßte daraus irgendein Datum ableiten, was in diese Woche fällt um dann wieder Anfang und Ende ermitteln zu können.

Re: erster/letzter Tag einer Woche

Verfasst: Fr, 04. Okt 2019 21:13
von AUGE_OHR
Manfred hat geschrieben: Fr, 04. Okt 2019 20:30 Aber andersherum, ich bekomme eine Wochennummer und müßte daraus irgendein Datum ableiten, was in diese Woche fällt um dann wieder Anfang und Ende ermitteln zu können.
wie wäre eine Function um den Montag einer KW zu errechnen :?:

Code: Alles auswählen

FUNCTION XF_KwMontag( nWoche, nJahr )
   //
   // SYNTAX : <dDatum> = XF_KwMontag( <nWoche>, <nJahr> )
   // <nWoche> = Kalender Woche
   // <nJahr>  = Jahr
   // <dDatum> = Datum
   //
   // ZWECK   : Montag der Kalender Woche des Jahr feststellen
   //
   // HINWEIS : für alle Wochen
   //
   // BEISPIEL: ? XF_KwMontag( 1, YEAR( DATE() ) )
   //
LOCAL dDay, nDayOfWeek, dDatum

   dDay := CTOD( "01.01." + LTRIM( STR( nJahr, 4, 0 ) ) )
   nDayOfWeek := IF( DOW( dDay ) = 1, 7, DOW( dDay ) - 1 )
   dDatum := IF( nDayOfWeek < 5, dDay - 6 - nDayOfWeek + 7 * nWoche, dDay + 8 - nDayOfWeek + 7 * ( nWoche - 1 ) )

RETURN ( dDatum )

Re: erster/letzter Tag einer Woche

Verfasst: Fr, 04. Okt 2019 23:50
von Herbert
Achtung, kleine Problematik zum Jahresbeginn!
Die erste Kalenderwoche eines Jahres ist die Woche, die mindestens vier Tage des neuen Jahres beinhaltet.

Fällt also beispielsweise der 1. Januar auf einen Dienstag, beginnt die erste Kalenderwoche mit Montag, den 31.12., da diese Woche sechs Tage des neuen Jahres enthält (Dienstag, Mittwoch, Donnerstag, Freitag, Samstag und Sonntag).

Fällt der 1. Januar hingegen auf den Freitag, dann beginnt die erste Kalenderwoche des neuen Jahres mit Montag, dem 04.01., da die Vorwoche nur drei Tage des neuen Jahres enthält (Freitag, Samstag, Sonntag).
aus aktuelle-kalenderwoche.org.

Re: erster/letzter Tag einer Woche

Verfasst: Sa, 05. Okt 2019 0:07
von AUGE_OHR
Herbert hat geschrieben: Fr, 04. Okt 2019 23:50
Die erste Kalenderwoche eines Jahres ist die Woche, die mindestens vier Tage des neuen Jahres beinhaltet.
JA

Code: Alles auswählen

dDatum := IF( nDayOfWeek < 5, ...

Re: erster/letzter Tag einer Woche

Verfasst: Sa, 05. Okt 2019 8:00
von Jan
Erweitertes Problem: In den USA (Heimat der üblichen Programmiersprachen udn damit auch der Logik darin) wird die erste Woche des Jahres anders bestimmt. Es kann also passieren, das die schon in KW 2 sind, während wir noch in KW 1 sind. Wenn man also Standard-Funktionen benutzt muß man aufpassen, ob die (für uns) korrekt rechnen.

Mit Xbase++ ist das zum Glück kein Problem.

Jan

Re: erster/letzter Tag einer Woche [ERLEDIGT]

Verfasst: Sa, 05. Okt 2019 8:45
von Manfred
beim Arbeiten wird man ja immer schlauer. Ich benötige jeweils den Montag und den Sonntag für meinen Bereich. Also habe ich das hier gebaut.

Code: Alles auswählen

FUNCTION fldow(dDatum)                                                          // First Last Day of Week
         LOCAL aFldow := Array(2)
         LOCAL nI
         LOCAL nTag

         DEFAULT dDatum TO Date()

         nTag := Dow(dDatum)                                                    // den Wochentag ermitteln

         FOR nI := nTag TO 7
             aFldow[2] := ++dDatum                                              // hier muß vorher hochegzählt werden
         NEXT
         FOR nI := 1 TO nTag
             aFldow[1] := dDatum--                                              // hier muß hinterher runtergezählt werden
         NEXT
         RETURN aFldow
damit komme ich erstmal zurecht. Hoffentlich ergeben sich später keine Seiteneffekte, egal wie und wodurch.

Re: erster/letzter Tag einer Woche

Verfasst: Sa, 05. Okt 2019 9:03
von AUGE_OHR
Jan hat geschrieben: Sa, 05. Okt 2019 8:00 Erweitertes Problem: In den USA (Heimat der üblichen Programmiersprachen udn damit auch der Logik darin) wird die erste Woche des Jahres anders bestimmt. Es kann also passieren, das die schon in KW 2 sind, während wir noch in KW 1 sind. Wenn man also Standard-Funktionen benutzt muß man aufpassen, ob die (für uns) korrekt rechnen.
JA dun hast Recht.
meine Version ist nur für die Deutsche Logik ausgelegt
Jan hat geschrieben:Mit Xbase++ ist das zum Glück kein Problem.
hast du die Lösung wie man den 3-Zeiler erweitert :?: