Berechnung eines Datums in einer Kalenderwoche

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
gf210957
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 101
Registriert: Mi, 21. Dez 2005 10:18

Berechnung eines Datums in einer Kalenderwoche

Beitrag von gf210957 »

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
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

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
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

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
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
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:

Beitrag von Tom »

Das Thema hatten wir schonmal, auch mit Programmierbeispielen, ist noch gar nicht so lange her:

http://www.xbaseforum.de/viewtopic.php?t=780
Herzlich,
Tom
gf210957
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 101
Registriert: Mi, 21. Dez 2005 10:18

Beitrag von gf210957 »

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
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,
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.
es gibt doch noch 2 Parameter !

versuche doch mal :

KWOCHE 01.01.2007
KWOCHE 01.01.2007 ( 1x 7)
...
KWOCHE 01.01.2007 (52x 7 )

gruss by OHR
Jimmy
gf210957
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 101
Registriert: Mi, 21. Dez 2005 10:18

Beitrag von gf210957 »

Hallo Jimmy,

du gehst bei Deiner Funktion von einem bekannten Datum aus, zu dem Du die KW ermittelst.
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.

Gruß Günter
Benutzeravatar
andreas
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1902
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Hat sich bedankt: 4 Mal
Kontaktdaten:

Beitrag von andreas »

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.

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
Gruß,

Andreas
VIP der XUG Osnabrück
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,
gf210957 hat geschrieben: du gehst bei Deiner Funktion von einem bekannten Datum aus, zu dem Du die KW ermittelst.
naja irgend ein Datum muss man ja vorgeben.
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.
Hast du den Code schon mal gestestet ? Das macht doch die Funktion.
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
gf210957
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 101
Registriert: Mi, 21. Dez 2005 10:18

Beitrag von gf210957 »

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
Antworten