herschrijven code voor zoeken datum bij weeknummer
This commit is contained in:
@@ -164,51 +164,25 @@ func makeValues(source, part string) [][5]any {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func dates() (start, first, last string) {
|
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
|
// 1 januari
|
||||||
t = t.AddDate(0, 0, 7*week-14)
|
t := time.Date(year, 1, 1, 12, 0, 0, 0, time.UTC)
|
||||||
|
|
||||||
// zoek juiste week
|
// zoek eerste donderdag
|
||||||
var y, w int
|
day := int(t.Weekday()) // 0 = zondag
|
||||||
for {
|
donderdag := 4 - day
|
||||||
y, _ = t.ISOWeek()
|
if donderdag < 0 {
|
||||||
if y < year {
|
donderdag = donderdag + 7
|
||||||
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 begin van de week
|
// schuif naar maandag voor eerste donderdag: donderdag - 3
|
||||||
d := int(t.Weekday())
|
// in de gewenste week: 7 * (week - 1)
|
||||||
if d == 0 {
|
t = t.AddDate(0, 0, donderdag-3+7*(week-1))
|
||||||
d = 7
|
|
||||||
}
|
|
||||||
tFirst := t.AddDate(0, 0, 1-d)
|
|
||||||
tLast := tFirst.AddDate(0, 0, 6)
|
|
||||||
tStart := tFirst.AddDate(0, 0, (1-size)*7)
|
|
||||||
|
|
||||||
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)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -50,53 +50,25 @@ func addWeek(s string) {
|
|||||||
year, err := strconv.Atoi(s[:4])
|
year, err := strconv.Atoi(s[:4])
|
||||||
x(err)
|
x(err)
|
||||||
|
|
||||||
// 15 januari van het jaar
|
// 1 januari
|
||||||
t := time.Date(year, 1, 15, 12, 0, 0, 0, time.UTC)
|
t := time.Date(year, 1, 1, 12, 0, 0, 0, time.UTC)
|
||||||
|
|
||||||
// eerste gok
|
// zoek eerste donderdag
|
||||||
t = t.AddDate(0, 0, 7*week-14)
|
day := int(t.Weekday()) // 0 = zondag
|
||||||
|
donderdag := 4 - day
|
||||||
// zoek juiste week
|
if donderdag < 0 {
|
||||||
var y, w int
|
donderdag = donderdag + 7
|
||||||
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 begin van de week
|
// schuif naar maandag voor eerste donderdag: donderdag - 3
|
||||||
d := int(t.Weekday())
|
// in de gewenste week: 7 * (week - 1)
|
||||||
if d == 0 {
|
t = t.AddDate(0, 0, donderdag-3+7*(week-1))
|
||||||
d = 7
|
t2 := t.AddDate(0, 0, 6)
|
||||||
}
|
|
||||||
tFirst := t.AddDate(0, 0, 1-d)
|
|
||||||
tLast := tFirst.AddDate(0, 0, 6)
|
|
||||||
|
|
||||||
dates = append(dates, Date{
|
dates = append(dates, Date{
|
||||||
Week: s,
|
Week: s,
|
||||||
First: makeDate(tFirst),
|
First: makeDate(t),
|
||||||
Last: makeDate(tLast),
|
Last: makeDate(t2),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -30,51 +30,26 @@ func main() {
|
|||||||
if year < 1000 || year > 9999 {
|
if year < 1000 || year > 9999 {
|
||||||
x(fmt.Errorf("ongeldig year: %d", year))
|
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
|
// schuif naar maandag voor eerste donderdag: donderdag - 3
|
||||||
t := time.Date(year, 1, 15, 12, 0, 0, 0, time.UTC)
|
// in de gewenste week: 7 * (week - 1)
|
||||||
|
t = t.AddDate(0, 0, donderdag-3+7*(week-1))
|
||||||
|
|
||||||
// eerste gok
|
y, w := t.ISOWeek()
|
||||||
t = t.AddDate(0, 0, 7*week-14)
|
if y != year || w != week {
|
||||||
|
fmt.Println("week number out of range")
|
||||||
// zoek juiste week
|
return
|
||||||
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
|
|
||||||
}
|
|
||||||
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
|
// voorgaande weken en deze week
|
||||||
t2 := t.AddDate(0, 0, -7*(weken-1))
|
t2 := t.AddDate(0, 0, -7*(weken-1))
|
||||||
|
|||||||
Reference in New Issue
Block a user