Golang 中按周数排列的日期范围
背景:
Time.ISOWeek()返回从星期一开始的周数。本文演示如何获取给定周的日期范围,假设从星期日开始。
解决方案:
首先对齐一周的第一天(星期一)从年中开始。根据周差乘以 7 添加天数来进行校正。
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 }
获取日期范围,确定一周的第一天并添加 6 天以获得最后一天
func WeekRange(year, week int) (start, end time.Time) { start = WeekStart(year, week) end = start.AddDate(0, 0, 6) return }
示例:
fmt.Println(WeekRange(2018, 1)) fmt.Println(WeekRange(2018, 2)) fmt.Println(WeekRange(2019, 1)) fmt.Println(WeekRange(2019, 2))
输出(在 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
附加说明:
WeekStart()函数管理超出范围的周。年份范围之外的周分别解释为上一年或下一年的最后一周或第一周。
以上是如何在 Golang 中计算给定周数的日期范围?的详细内容。更多信息请关注PHP中文网其他相关文章!