Welkom op het forum van startpagina!

Dit forum staat op alleen-lezen. Je kan hier informatie zoeken en oude berichten terugvinden, maar geen nieuwe berichten plaatsen.

Naar overzicht van alle forums

Weeknummers in Delphi

  • wouter zijlstra

    Ik ben op zoek naar een functie voor Delphi die door middel van de datum week nummers kan uitrekenen.

    alvast bedankt,

    wouter

  • Iddo

    Neem de huidige datum, trek daar 1 januari van af en deel dat getal door zeven. Dan krijg je toch het weeknummer? Moet je alleen nog even afrekenen met het jaartal.

    Dan moet het kunnen volgens mij.

  • Sven Glazenburg

    Dit 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

  • Iddo

    Volgens mij begint week 1 bij de eerste maandag in januari…

    Je hebt er in ieder geval officiële ISO normen voor, maar die weet ik zo niet.

    Bijvoorbeeld –> is maandag 2 januari nou week 1 of week 2?

    Maar je denkwijze klopt volgens mij wel.

  • Sven Glazenburg

    Ik weet niet wat de precieze regels zijn, maar kijk bijvoorbeeld naar eind dit jaar:

    31 december 2001 is week 1 van 2002…..en 7 januari 2002 is de eerste dag van week 2 van 2002.

    Dus…geen idee wat de officiële regels zijn….

    Groeten,

    Sven Glazenburg

  • 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;

  • Sven Glazenburg

    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;

  • Iddo

    Ziet er goed uit. Alleen… gaat Delphi er ALTIJD van uit dat de eerste dag van de week zondag is?

    Ik bedoel: kan je Windows niet zo configureren dat de eerste dag maandag is? Ik dat geval heb je een (klein) probleem: begint je week gewoon wat later, en mag je vier i.p.v. vijf dagen werken ;)

  • Sven Glazenburg

    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

  • wouter zijlstra

    mijn hartelijke dank voor jullie hulp ik zal hier ongetwijveld iets aan hebben.

    thanks

    wouter