假设我们的输入是start_date=2022-01-01和end_date=2022-01-05,如何得到如下的输入:
start_date=2022-01-01
end_date=2022-01-05
2022-01-01 2022-01-02 2022-01-03 2022-01-04
我可以使用time.Parse解析开始和结束,使用.Sub获得中间的日期,然后迭代范围并创建字符串日期。我想知道是否有任何方法或更好的解决方案在Go中创建日期范围?
time.Parse
.Sub
Go
wfauudbj1#
您可以使用:
const ( layout = "2006-01-02" ) func main() { startDate, _ := time.Parse(layout, "2022-01-01") endDate, _ := time.Parse(layout, "2022-01-05") for date := startDate; date.Before(endDate); date = date.AddDate(0, 0, 1) { fmt.Println(date.Format(layout)) } }
这将为您提供:
Full example
wgxvkvu92#
Go语言并不使用yyyy-mm-dd布局来格式化时间,而是格式化一个特殊的布局参数
时间或日期的格式应与此相同。(此日期写成01/02 03:04:05PM '06 -0700时更容易记住。)
const ( layoutISO = "2006-01-02" layoutUS = "January 2, 2006" ) date := "1999-12-31" t, _ := time.Parse(layoutISO, date) fmt.Println(t) // 1999-12-31 00:00:00 +0000 UTC fmt.Println(t.Format(layoutUS)) // December 31, 1999
该功能
他们的签名如下:
func Parse(layout, value string) (Time, error) func (t Time) Format(layout string) string
你可以使用这个日期范围
const ( layoutISO = "2006-01-02" layoutUS = "January 2, 2006" ) func main() { date := "1999-12-31" t, _ := time.Parse(layoutISO, date) fmt.Println(t) // 1999-12-31 00:00:00 +0000 UTC fmt.Println(t.Format(layoutUS)) // December 31, 1999 startDate, _ := time.Parse(layoutISO, "2022-01-01") endDate, _ := time.Parse(layoutISO, "2022-01-05") for date := startDate; date.Before(endDate); date = date.AddDate(0, 0, 1) { fmt.Println(date.Format(layoutISO)) } }
2条答案
按热度按时间wfauudbj1#
您可以使用:
这将为您提供:
Full example
wgxvkvu92#
Go语言并不使用yyyy-mm-dd布局来格式化时间,而是格式化一个特殊的布局参数
时间或日期的格式应与此相同。(此日期写成01/02 03:04:05PM '06 -0700时更容易记住。)
该功能
他们的签名如下:
你可以使用这个日期范围