package main import ( e "codeberg.org/pebbe/errors" "encoding/json" "fmt" "os" "slices" "strconv" "strings" "time" ) type Date struct { Week string `json:"week"` First string `json:"first"` Last string `json:"last"` } var ( x = e.ExitErr dates = make([]Date, 0) ) func main() { files, err := os.ReadDir("/net/corpora/nlnieuws/data/json") x(err) for _, file := range files { filename := file.Name() if strings.HasPrefix(filename, "DATA-") && strings.HasSuffix(filename, "-4.json") { addWeek(filename[5:12]) } } slices.Reverse(dates) b, err := json.Marshal(dates) x(err) fmt.Println(string(b)) } func addWeek(s string) { week, err := strconv.Atoi(s[5:]) x(err) year, err := strconv.Atoi(s[:4]) x(err) // 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 } // 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(t), Last: makeDate(t2), }) } func makeDate(d time.Time) string { return fmt.Sprintf("%d-%02d-%02d", d.Year(), int(d.Month()), d.Day()) }