herschrijven code voor zoeken datum bij weeknummer

This commit is contained in:
Peter Kleiweg
2026-04-24 14:09:44 +02:00
parent 5c492f55ff
commit c3d19c4cd2
3 changed files with 43 additions and 122 deletions

View File

@@ -50,53 +50,25 @@ func addWeek(s string) {
year, err := strconv.Atoi(s[:4])
x(err)
// 15 januari van het jaar
t := time.Date(year, 1, 15, 12, 0, 0, 0, time.UTC)
// 1 januari
t := time.Date(year, 1, 1, 12, 0, 0, 0, time.UTC)
// eerste gok
t = t.AddDate(0, 0, 7*week-14)
// zoek juiste week
var y, w int
for {
y, _ = t.ISOWeek()
if y < year {
t = t.AddDate(0, 12, 0)
continue
}
if y > year {
t = t.AddDate(0, -12, 0)
continue
}
break
}
for {
y, w = t.ISOWeek()
if w < week {
t = t.AddDate(0, 0, 7)
continue
}
if w > week {
t = t.AddDate(0, 0, -7)
}
break
}
if y != year {
x(fmt.Errorf("ongeldige combinatie van week/jaar: %d/%d", week, year))
// zoek eerste donderdag
day := int(t.Weekday()) // 0 = zondag
donderdag := 4 - day
if donderdag < 0 {
donderdag = donderdag + 7
}
// zoek begin van de week
d := int(t.Weekday())
if d == 0 {
d = 7
}
tFirst := t.AddDate(0, 0, 1-d)
tLast := tFirst.AddDate(0, 0, 6)
// schuif naar maandag voor eerste donderdag: donderdag - 3
// in de gewenste week: 7 * (week - 1)
t = t.AddDate(0, 0, donderdag-3+7*(week-1))
t2 := t.AddDate(0, 0, 6)
dates = append(dates, Date{
Week: s,
First: makeDate(tFirst),
Last: makeDate(tLast),
First: makeDate(t),
Last: makeDate(t2),
})
}