在go
中,是否有办法迭代特定月份并从中获取所有time.Date
个对象?
例如,迭代4月将导致04012016
到04312016
:
for _, dayInMonth := range date.April {
// do stuff with dates returned
}
(目前上述代码显然不起作用。)
或者,如果不是标准库的一部分,那么第三方库是否等同于moment.js?
答案 0 :(得分:26)
标准库中没有定义time.Date对象。只有time.Time对象。也无法对它们进行范围循环,但手动循环它们非常简单:
// set the starting date (in any way you wish)
start, err := time.Parse("2006-1-2", "2016-4-1")
// handle error
// set d to starting date and keep adding 1 day to it as long as month doesn't change
for d := start; d.Month() == start.Month(); d = d.AddDate(0, 0, 1) {
// do stuff with d
}
答案 1 :(得分:-1)
@jessius方式只能在迭代时间不到一个月的情况下才能工作。 更好的迭代方法是使用时间的纪元格式。
例如,对于oneDay,我们知道它是86400秒。 我们可以做下文
oneDay := int64(86400) // a day in seconds.
startDate := int64(1519862400)
endDate := int64(1520640000)
for timestamp := startDate; timestamp <= endDate; timestamp += oneDay {
// do your work
}
简单且可行的迭代日。
对于月份,这种方式无法正常工作,因为每个月都有不同的日子。我只有与@jussius类似的想法,但调整适用于月份迭代。