golang:有没有办法迭代特定的月份或周

时间:2016-06-07 12:32:29

标签: date go

go中,是否有办法迭代特定月份并从中获取所有time.Date个对象?

例如,迭代4月将导致0401201604312016

for _, dayInMonth := range date.April {
   // do stuff with dates returned
}

(目前上述代码显然不起作用。)

或者,如果不是标准库的一部分,那么第三方库是否等同于moment.js

2 个答案:

答案 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类似的想法,但调整适用于月份迭代。