Berechnung eines Datums in einer Kalenderwoche
Moderator: Moderatoren
Berechnung eines Datums in einer Kalenderwoche
Hallo,
Zur Darstellung einer Tabelle benötige ich das Beginn- und das Ende-Datum einer KW, wobei in der Funktion die KW und das Jahr übergeben wird.
Die Berechnung muss nach ISO Norm erfolgen.
Hat jemand schon so etwas programmiert, und kann mir Tipps geben?
Ich bin für jede Hilfe dankbar.
Günter Früholz
Zur Darstellung einer Tabelle benötige ich das Beginn- und das Ende-Datum einer KW, wobei in der Funktion die KW und das Jahr übergeben wird.
Die Berechnung muss nach ISO Norm erfolgen.
Hat jemand schon so etwas programmiert, und kann mir Tipps geben?
Ich bin für jede Hilfe dankbar.
Günter Früholz
- Jan
- Marvin
- Beiträge: 14651
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Hallo Günter,
bist Du Subscription-Inhaber? Dann kannst Du die Tools benutzen mit week(). Damit kannst Du die aktuelle Woche festlegen. Mit CDoW() aus dem "normalen" Xbase kannst Du dann feststellen, welcher Wochentag das ist und dann einfach entsprechend Tage abziehen und addieren.
Habe ich nicht probiert, aber müsste eigentlich gehen.
Jan
bist Du Subscription-Inhaber? Dann kannst Du die Tools benutzen mit week(). Damit kannst Du die aktuelle Woche festlegen. Mit CDoW() aus dem "normalen" Xbase kannst Du dann feststellen, welcher Wochentag das ist und dann einfach entsprechend Tage abziehen und addieren.
Habe ich nicht probiert, aber müsste eigentlich gehen.
Jan
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
hi,
Code: Alles auswählen
PROCEDURE MAIN(cheute,ntage)
LOCAL dHeute
LOCAL nYear
LOCAL nKWoche
SET DATE GERMAN
SET EPOCH TO 1990
SET CENTURY OFF
DO CASE
CASE PCOUNT() = 0
dHeute := DATE()
CASE PCOUNT() = 1
dHeute := CTOD(cheute)
CASE PCOUNT() = 2
dHeute := CTOD(cheute) +VAL(ntage)
ENDCASE
nYear := YEAR(dHeute)
nKWoche := WOCHEJAHR(dHeute)
SETCOLOR("W+/B")
CLS
@ 02,10 SAY "Datum heute "+DTOC(dHeute)
@ 03,10 SAY "Kwoche ist "+STR(nKWoche,2)
SETCOLOR("GR+/B")
@ 11,10 SAY "KW "+STR(nKWoche+0,2)+" "+DTOC(WOCHEMONTAG(nKWoche+0,nYear))+" - "+DTOC(WOCHEMONTAG(nKWoche+0,nYear)+6)
RETURN
FUNCTION WOCHEJAHR(m_datum)
** SYNTAX : <ExpN> = WOCHEJAHR(<ExpD>)
** <ExpN> = R
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9357
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 101 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Das Thema hatten wir schonmal, auch mit Programmierbeispielen, ist noch gar nicht so lange her:
http://www.xbaseforum.de/viewtopic.php?t=780
http://www.xbaseforum.de/viewtopic.php?t=780
Herzlich,
Tom
Tom
Hallo Jimmy, hallo Tom,
danke für Eure Antwort.
Leider habt Ihr meine Frage falsch verstanden.
Ich benötige nicht die KW-Berechnung aus einem übergebenen Datum, sondern genau umgekehrt, die Ermittlung des ersten Tages-Datums einer an die Funktion übergebenen KW.
Den von Tom erwähnten Thread habe ich eingehend studiert. Er enthält jedoch nicht die notwendigen Angaben. Oder habe ich da etwas falsch verstanden?
Gruß Günter
danke für Eure Antwort.
Leider habt Ihr meine Frage falsch verstanden.
Ich benötige nicht die KW-Berechnung aus einem übergebenen Datum, sondern genau umgekehrt, die Ermittlung des ersten Tages-Datums einer an die Funktion übergebenen KW.
Den von Tom erwähnten Thread habe ich eingehend studiert. Er enthält jedoch nicht die notwendigen Angaben. Oder habe ich da etwas falsch verstanden?
Gruß Günter
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
hi,
versuche doch mal :
KWOCHE 01.01.2007
KWOCHE 01.01.2007 ( 1x 7)
...
KWOCHE 01.01.2007 (52x 7 )
gruss by OHR
Jimmy
es gibt doch noch 2 Parameter !gf210957 hat geschrieben: Leider habt Ihr meine Frage falsch verstanden.
Ich benötige nicht die KW-Berechnung aus einem übergebenen Datum, sondern genau umgekehrt, die Ermittlung des ersten Tages-Datums einer an die Funktion übergebenen KW.
versuche doch mal :
KWOCHE 01.01.2007
KWOCHE 01.01.2007 ( 1x 7)
...
KWOCHE 01.01.2007 (52x 7 )
gruss by OHR
Jimmy
- andreas
- Der Entwickler von "Deep Thought"
- Beiträge: 1902
- Registriert: Mi, 28. Sep 2005 10:53
- Wohnort: Osnabrück
- Hat sich bedankt: 4 Mal
- Kontaktdaten:
Hallo Günter,
ich habe mal in meinem Programm den Letzten Tag ermittelt. Du kannst die Funktion bestimmt an deine Bedürfnisse anpassen, muss aber dafür die Tools haben.
ich habe mal in meinem Programm den Letzten Tag ermittelt. Du kannst die Funktion bestimmt an deine Bedürfnisse anpassen, muss aber dafür die Tools haben.
Code: Alles auswählen
** wenn KW und Jahr bekannt sind, das letzte Datum von KW (Sonntag) ermitteln
FUNCTION KWandYearToDate(nKW, nJahr) //Jahr - 4 stellig
local dDatum := ctod( ("01.01."+ alltrim(str(nJahr))) )
do while UPPER(cdow(dDatum))!="SONNTAG"
dDatum := dDatum + 1
enddo
do while nKW != week(dDatum, .f.)
IF nKW == week(dDatum, .f.)
exit
else
dDatum := dDatum + 7
ENDIF
enddo
RETURN dDatum
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
hi,
wenn du also die 40st KW in 2007 suchst : KWOCHE(01.01.2007,((40-1)x7) ) und du bekommst : KW 40 01.10.07 - 07.10.07
gruss by OHR
Jimmy
naja irgend ein Datum muss man ja vorgeben.gf210957 hat geschrieben: du gehst bei Deiner Funktion von einem bekannten Datum aus, zu dem Du die KW ermittelst.
Hast du den Code schon mal gestestet ? Das macht doch die Funktion.gf210957 hat geschrieben: Ich benötige jedoch das Datum innerhalb einer KW. Konkret benötige ich das Anfangs- und Endedatum einer bestimmten KW, um die Umsätze nur für diese Woche aus einer DB zu filtern.
wenn du also die 40st KW in 2007 suchst : KWOCHE(01.01.2007,((40-1)x7) ) und du bekommst : KW 40 01.10.07 - 07.10.07
gruss by OHR
Jimmy
Hallo Jimmy,
danke für Deine Unterstützung. Genau diese Funktion habe ich gesucht.
Zwar war ich etwas irritiert, dass Du etwas von einer Funktion KWOCHE geschrieben hast, und ich diese in Deinem Source gar nicht gefunden habe, aber nach nochmaligem Hinschauen habe ich gesehen, dass Du sicherlich die Funktion WOCHEMONTAG gemeint hast.
Manchmal sieht man einfach vor lauter Wald die Bäume nicht.
Nochmals vielen Dank, und einen schönen Abend.
Gruß Günter
danke für Deine Unterstützung. Genau diese Funktion habe ich gesucht.
Zwar war ich etwas irritiert, dass Du etwas von einer Funktion KWOCHE geschrieben hast, und ich diese in Deinem Source gar nicht gefunden habe, aber nach nochmaligem Hinschauen habe ich gesehen, dass Du sicherlich die Funktion WOCHEMONTAG gemeint hast.
Manchmal sieht man einfach vor lauter Wald die Bäume nicht.
Nochmals vielen Dank, und einen schönen Abend.
Gruß Günter