Ik ben op zoek naar een functie voor Delphi die door middel van de datum week nummers kan uitrekenen.
alvast bedankt,
wouter
Dit forum staat op alleen-lezen. Je kan hier informatie zoeken en oude berichten terugvinden, maar geen nieuwe berichten plaatsen.
Naar overzicht van alle forumsDit werkt alleen als 1 januari op een maandag valt….volgens mij zou het zoiets moeten zijn:
- Bereken welke dag 1 januari van hetzelfde jaar is.
- Bereken dan de datum van de maandag in diezelfde week.
- Neem de huidige datum, trek daar die datum vanaf.
- Deel dit aantal dagen nu door 7 (div) en tel er 1 bij op.
Groeten,
Sven Glazenburg
Onderstaande functie berekent op de door mij voorgestelde manier het weeknummer. Het kan natuurlijk nog geoptimaliseerd worden: ik heb veel te veel variabelen (voor de duidelijkheid) gebruikt.
let op 1:
Ik houd hier de Nederlandse weken aan: weken beginnen op maandagen.
Let op 2:
Ik forceer hier maximaal 52 weken in een jaar…dat betekent dus dat 31 december 2001 als resultaat week 1 oplevert…hiermee wordt dan week 1 van het volgende jaar (2002) bedoeld…
Groeten,
Sven
function WeekNumber(aDate:TDateTime):Byte;
var
d2:TDateTime;
y, m, d : Word;
dw, ad, wn : Word;
begin
(* Haal de afzonderlijke variabelen jaar, maand en dag *)
DecodeDate(aDate, y, m, d);
(* 1 januari zelfde jaar berekenen *)
d2 := EncodeDate(y, 1, 1);
(* Welke dag van de week is het? *)
dw := DayOfWeek(d2);
(* Nederlandse week begint op maandag…omrekenen dus: *)
if (dw=0) then dw := 8;
dw := dw-1; (* maandag wordt 1, dinsdag 2, etc. *)
(* Maandag in die week berekenen: *)
d2 := d2 - (dw - 1);
(* Aantal dagen berekenen *)
ad := Trunc(aDate) - Trunc(d2);
(* Weeknummer berekenen *)
wn := (ad div 7) + 1;
(* Een jaar heeft 52 weken,
dus week 53 is week 1 van het nieuwe jaar *)
if (wn>52) then Dec(wn,52);
(* Resultaat teruggeven *)
WeekNumber := wn;
end;
Oeps…klein foutje ontdekt: er staat ergens: if (dw=0) then dw := 8;
Dit moet zijn: if (dw=1) then dw := 8;
Voor de volledigheid nogmaals (maar nu goed) de functie:
Groeten,
Sven Glazenburg
function WeekNumber(aDate:TDateTime):Byte;
var
d2:TDateTime;
y, m, d : Word;
dw, ad, wn : Word;
begin
(* Haal de afzonderlijke variabelen jaar, maand en dag *)
DecodeDate(aDate, y, m, d);
(* 1 januari zelfde jaar berekenen *)
d2 := EncodeDate(y, 1, 1);
(* Welke dag van de week is het? *)
dw := DayOfWeek(d2);
(* Nederlandse week begint op maandag…omrekenen dus: *)
if (dw=1) then dw := 8;
dw := dw-1; (* maandag wordt 1, dinsdag 2, etc. *)
(* Maandag in die week berekenen: *)
d2 := d2 - (dw - 1);
(* Aantal dagen berekenen *)
ad := Trunc(aDate) - Trunc(d2);
(* Weeknummer berekenen *)
wn := (ad div 7) + 1;
(* Een jaar heeft 52 weken,
dus week 53 is week 1 van het nieuwe jaar *)
if (wn>52) then Dec(wn,52);
(* Resultaat teruggeven *)
WeekNumber := wn;
end;
Ja, Delphi heeft inderdaad ALTIJD zondag als eerste dag van de week, tenminste in de DayOfWeek functie die ik gebruik. Hier is wat in de Delphi help staat:
“DayOfWeek returns the day of the week of the specified date as an integer between 1 and 7, where Sunday is the first day of the week and Saturday is the seventh.”
Groeten,
Sven Glazenburg
Weet je zeker dat je deze post als spam wil rapporteren aan de beheerder?
Deze post wordt als spam gerapporteerd aan de beheerder van het forum. Bedankt!
Weet u zeker dat u dit topic wil verwijderen?