• De afgelopen dagen zijn er meerdere fora waarop bestaande accounts worden overgenomen door spammers. De gebruikersnamen en wachtwoorden zijn via een hack of een lek via andere sites buitgemaakt. Via have i been pwned? kan je controleren of jouw gegeven ook zijn buitgemaakt. Wijzig bij twijfel jouw wachtwoord of schakel de twee-staps-verificatie in.

Bereken datum van 1ste maandag van weeknummer

Status
Niet open voor verdere reacties.

LV67

Nieuw lid
Lid geworden
28 aug 2022
Berichten
1
Waarderingsscore
0
Hallo,

Ik zou de datum moeten kunnen berekenen van de maandag van een welbepaalde week.
vb jaar = 2022 , week = 35 -> maandag is 29.08.2022.
Ik heb op internet al verschillende posts gevonden en uitgeprobeerd maar ik loop telkens tegen een probleem aan.

Onderstaande code geeft inderdaad maandag 02.01.2023.
Maar als ik de parameters wijzig naar jaar = 2022 en week = 52 bekom ik maandag 19.12.2022 en dit zou maandag 26.12.2022 moeten zijn.

var year = 2023; var weekNum = 1; var DAY = 86400000; var year = new Date(year.toString()); // toString first so it parses correctly year numbers var daysToMonday = (1 - year.getDay()); var mondayOfFirstWeek = new Date(year.getTime() + daysToMonday * DAY); var nthMonday = new Date(mondayOfFirstWeek.getTime() + (7 * (weekNum - 1) * DAY)); return nthMonday;

Iemand een idee hoe dit opgelost kan worden ?
 
Nee, directe oplossing weet ik niet omdat ik niet in programmeren zit, en ook eigenlijk niet herken in welke taal je werkt.
Wel heb ik even gezocht, en je probleem schijnt voort te komen uit het feit dat in jouw voorbeeld er naar Amerikaanse telling gerekend wordt, en die is anders dan (b.v.) de Europese. Onze weeknummers zijn dus gebaseerd op een andere telling, namelijk die vastgelegd in ISO 8601, en die zegt o.a.:

"Het eerste weeknummer van het jaar (week 1) is die week waarin de eerste donderdag van dat jaar voorkomt".

Dit is weer gebaseerd op de regel dat de week behoort tot het jaar waarin de meeste dagen (4) van die week vallen, en de regel dat de week op maandag begint. Dus Do-Vrij-Za-Zo vallen dan in het nieuwe jaar, en de week behoort dan tot dat jaar.

De Amerikanen doen dat anders, al weet ik niet exact hoe.

Nogmaals, de oplossing heb ik niet, maar de oorzaak is er dus wel, een verschillende berekening.

Nou vond ik hier iets voor Excel formules, en in VBA:

Andere talen, maar misschien dat het je een idee geeft.
 
Je hebt te maken met de Nederlands NEN 2772 en niet met de ISO 8601 die je meestal op internet vindt. In Nederland is maandag de 1e dag (dus niet zondag als 1e dag). Ook heb je te maken met week 1 die altijd op de 1e donderdag van het jaar begint. Daardoor heb je in sommige jaren week 53.

Met een beetje zoeken en puzzelen kom ik hierop

JavaScript:
function WeekNaarDatum(w, j) {
    // date van aantal dagen sinds 1 januari
    let simpel = new Date(j, 0, 1 + (w - 1) * 7);
    // dagnr van simpel
    let dow = simpel.getDay();
    // kopie van simpel
    let ISOweekStart = simpel;
    // Dagnr 1 t/m 4 dan +1. Dagnr 5 t/m 7 dan +8
    if (dow <= 4)
        ISOweekStart.setDate(simpel.getDate() - simpel.getDay() + 1);
    else
        ISOweekStart.setDate(simpel.getDate() + 8 - simpel.getDay());
    return ISOweekStart;
}

let week = 1;
let jaar = 2023;
let datum = WeekNaarDatum(week, jaar);
console.log('Maandag van week ' + week + ' is ' + datum);

Het resultaat is een UTC datum waar je de datum kan uithalen, bijvoorbeeld
Mon Jan 02 2023 00:00:00 GMT+0100 (Midden-Europese standaardtijd)

Toon dit als datum met bijvoorbeeld

JavaScript:
console.log( datum.toLocaleDateString("nl-NL") );
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan