Heim >Backend-Entwicklung >Golang >Wie berechnet man einen Datumsbereich anhand einer Wochennummer in Golang?
Datumsbereich nach Wochennummer in Golang
Hintergrund:
Time.ISOWeek() gibt die Wochennummer zurück, die am Montag beginnt. In diesem Artikel wird gezeigt, wie Sie den Datumsbereich für eine bestimmte Woche erhalten, vorausgesetzt, sie beginnt am Sonntag.
Lösung:
Beginnen Sie mit der Ausrichtung auf den ersten Tag der Woche (Montag) ab Mitte der Woche Jahr. Korrigieren Sie, indem Sie Tage basierend auf der Wochendifferenz multipliziert mit 7 hinzufügen.
func WeekStart(year, week int) time.Time { t := time.Date(year, 7, 1, 0, 0, 0, 0, time.UTC) if wd := t.Weekday(); wd == time.Sunday { t = t.AddDate(0, 0, -6) } else { t = t.AddDate(0, 0, -int(wd)+1) } _, w := t.ISOWeek() t = t.AddDate(0, 0, (week-w)*7) return t }
Um den Datumsbereich zu erhalten , bestimmen Sie den ersten Tag der Woche und addieren Sie 6 Tage, um den letzten zu erhalten Tag.
func WeekRange(year, week int) (start, end time.Time) { start = WeekStart(year, week) end = start.AddDate(0, 0, 6) return }
Beispiel:
fmt.Println(WeekRange(2018, 1)) fmt.Println(WeekRange(2018, 2)) fmt.Println(WeekRange(2019, 1)) fmt.Println(WeekRange(2019, 2))
Ausgabe (versuchen Sie es auf dem Go Playground):
2018-01-01 00:00:00 +0000 UTC 2018-01-07 00:00:00 +0000 UTC 2018-01-08 00:00:00 +0000 UTC 2018-01-14 00:00:00 +0000 UTC 2018-12-31 00:00:00 +0000 UTC 2019-01-06 00:00:00 +0000 UTC 2019-01-07 00:00:00 +0000 UTC 2019-01-13 00:00:00 +0000 UTC
Zusätzlicher Hinweis:
Die WeekStart()-Funktion verwaltet Wochen außerhalb des Bereichs. Wochen außerhalb des Jahresbereichs werden als letzte bzw. erste Woche des vorherigen bzw. nachfolgenden Jahres interpretiert.
Das obige ist der detaillierte Inhalt vonWie berechnet man einen Datumsbereich anhand einer Wochennummer in Golang?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!