31 lines
596 B
Go
31 lines
596 B
Go
package week
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
// returns first date of week
|
|
func WeekDate(year, week int) (time.Time, error) {
|
|
// 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))
|
|
|
|
y, w := t.ISOWeek()
|
|
if y != year || w != week {
|
|
return t, fmt.Errorf("week number out of range")
|
|
}
|
|
|
|
return t, nil
|
|
}
|