From c3d19c4cd2c3e0afa7c5e57822ab05a892addb1e Mon Sep 17 00:00:00 2001 From: Peter Kleiweg Date: Fri, 24 Apr 2026 14:09:44 +0200 Subject: [PATCH] herschrijven code voor zoeken datum bij weeknummer --- cmd/data2json/data2json.go | 54 +++++++++------------------------- cmd/dates2json/dates2json.go | 54 ++++++++-------------------------- cmd/week2files/week2files.go | 57 ++++++++++-------------------------- 3 files changed, 43 insertions(+), 122 deletions(-) diff --git a/cmd/data2json/data2json.go b/cmd/data2json/data2json.go index 6ce463a..b8ada7d 100644 --- a/cmd/data2json/data2json.go +++ b/cmd/data2json/data2json.go @@ -164,51 +164,25 @@ func makeValues(source, part string) [][5]any { } func dates() (start, first, last string) { - // 15 januari van het jaar - t := time.Date(year, 1, 15, 12, 0, 0, 0, time.UTC) - // eerste gok - t = t.AddDate(0, 0, 7*week-14) + // 1 januari + t := time.Date(year, 1, 1, 12, 0, 0, 0, time.UTC) - // 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) - tStart := tFirst.AddDate(0, 0, (1-size)*7) + // 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)) - return makeDate(tStart), makeDate(tFirst), makeDate(tLast) + t2 := t.AddDate(0, 0, 6) + tStart := t.AddDate(0, 0, (1-size)*7) + + return makeDate(tStart), makeDate(t), makeDate(t2) } diff --git a/cmd/dates2json/dates2json.go b/cmd/dates2json/dates2json.go index 6e4b7b5..11d00fd 100644 --- a/cmd/dates2json/dates2json.go +++ b/cmd/dates2json/dates2json.go @@ -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), }) } diff --git a/cmd/week2files/week2files.go b/cmd/week2files/week2files.go index a2884d0..b0ba576 100644 --- a/cmd/week2files/week2files.go +++ b/cmd/week2files/week2files.go @@ -30,51 +30,26 @@ func main() { if year < 1000 || year > 9999 { x(fmt.Errorf("ongeldig year: %d", year)) } - if week < 1 || week > 53 { - x(fmt.Errorf("ongeldige week: %d", week)) + + // 1 januari + t := time.Date(year, 1, 1, 12, 0, 0, 0, time.UTC) + + // zoek eerste donderdag + day := int(t.Weekday()) // 0 = zondag + donderdag := 4 - day + if donderdag < 0 { + donderdag = donderdag + 7 } - // 15 januari van het jaar - t := time.Date(year, 1, 15, 12, 0, 0, 0, time.UTC) + // 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)) - // eerste gok - t = t.AddDate(0, 0, 7*week-14) - - // zoek juiste week - var y, w int - for { - y, w = t.ISOWeek() - if y < year { - t = t.AddDate(0, 12, 0) - continue - } - if y > year { - t = t.AddDate(0, -12, 0) - continue - } - break + y, w := t.ISOWeek() + if y != year || w != week { + fmt.Println("week number out of range") + return } - 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 begin van de week - d := int(t.Weekday()) - if d == 0 { - d = 7 - } - t = t.AddDate(0, 0, 1-d) // voorgaande weken en deze week t2 := t.AddDate(0, 0, -7*(weken-1))