Met dank aan Mehmet Okul vooor zijn post op onze Visual Objects Nieuwsgroep en de originele auteurs die hun bijdragen leverden op comp.lang.clipper.visual-objects.
FUNCTION Week( _dDatum AS DATE ) AS DWORD PASCAL
LOCAL _nWoche AS DWORD
LOCAL _dJahrAnfang AS DATE
LOCAL _dTemp AS DATE
_dTemp := _dDatum + 8
_dJahrAnfang := KwBeginn( Year( _dTemp ) )
IF _dJahrAnfang > _dDatum // dDatum gehört noch zur letzten Woche des
Vorjahrs
_dJahrAnfang := KwBeginn( Year( _dTemp ) - 1 )
ENDIF
_nWoche := Integer( ( _dDatum - _dJahrAnfang ) / 7 ) + 1
RETURN _nWoche
STATIC FUNCTION KwBeginn( _nJahr AS DWORD ) AS DATE PASCAL
// Liefert den Montag der ersten Woche des Jahres
LOCAL _dJahrAnfang AS DATE
LOCAL _nErstTag AS DWORD
_dJahrAnfang := ConDate( _nJahr, 1, 1 )
_nErstTag := TdW( _dJahrAnfang )
_dJahrAnfang := _dJahrAnfang + 8 - _nErstTag
// Hinweis von Dieter Crispien 100016,1673
IF _nErstTag < 4 .OR. ( _nErstTag = 4 .AND. ConDate( _nJahr, 2, 29 ) =
NULL_DATE )
// 1.1. vor Donnerstag oder Schaltjahr + 1.1. ein Donnerstag
_dJahrAnfang -= 7
ENDIF
RETURN _dJahrAnfang
=========
If you haven't already got what you want. Here's 2 other functions, one to
find the week and another to find the first day. You may have to modify them
a little bit, because they are made for Sweden, but a least you get the
idea.
Week of Date
FUNC GMF_WoD(dDay AS DATE) AS WORD STRICT
LOCA wRetVal AS WORD
LOCA lOldCent AS LOGIC
LOCA dStart AS DATE
LOCA w1,wDays,wInitDays AS WORD
LOCA iDays AS LONGINT
lOldCent := SetCentury(TRUE)
dStart :=CToD(NTrim(Year(dDay))+".01.01")
FOR w1 := 1 UPTO 7
IF DoW(dStart+wInitDays) = 2
EXIT
ENDI
++wInitDays
NEXT w1
iDays := (dDay-dStart+1)-wInitDays
wDays := Max(iDays,1)
wRetVal := Ceil(FLOAT(wDays)/7)
IIF(wInitDays>3 .AND. iDays>0,++wRetVal,NIL)
SetCentury(lOldCent)
RETU wRetVal
First day of Week
FUNC GMF_1DoW(wYear AS WORD, wWeek AS WORD) AS DATE STRICT
LOCA dRetVal,dOne AS DATE
LOCA bDay AS BYTE
LOCA aDay AS ARRAY
LOCA lOldCent AS LOGIC
lOldCent := SetCentury(TRUE)
dOne := CToD(NTrim(wYear)+".01.01") // AppWin_BookMark: Last day of las
year!
aDay := {01,00,06,05,04,03,02}
bDay := aDay[DoW(dOne)]
--wWeek
dRetVal := dOne + (wWeek * 7 + bDay)
IIF(bDay>3, dRetVal:=dRetVal-7 , NIL)
dRetVal := dRetVal
SetCentury(lOldCent)
RETU dRetVal