Golang 中按週數排列的日期範圍
解決週數差異
時間。 Go 標準函式庫中的 ISOWeek() 函數傳回 ISO 週數,從星期一開始。但是,您似乎需要基於星期日開始日期的周數。
自訂實用程式
要解決此問題,讓我們利用自訂實用程式函數來取得所需的日期範圍:
import "time" func WeekStart(year, week int) time.Time { // Align to first day of the week (Sunday) and correct week number t := time.Date(year, time.July, 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) } t = t.AddDate(0, 0, (week-1)*7) return t }
週範圍
如果您需要指定週的開始日期和結束日期,可以使用以下函數:
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, 52))
輸出
2018-01-01 00:00:00 +0000 UTC 2018-01-07 00:00:00 +0000 UTC 2018-12-24 00:00:00 +0000 UTC 2018-12-30 00:00:00 +0000 UTC
輸出
輸出輸出輸出輸出注意:此方法透過將0 解釋為處理超出範圍的周上一年的最後一周,-1 為上一年倒數第二週,依此類推。以上是如何在 Go 中根據週數取得日期範圍?的詳細內容。更多資訊請關注PHP中文網其他相關文章!