有没有办法迭代特定的月份或星期

有没有办法在go某个特定月份进行迭代并从中获取所有time.Date对象?

例如,在 April 上进行迭代将导致04012016until 04312016

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

(目前上面的代码显然不会工作)。

或者,如果不是标准库的一部分,是否有与moment.js等效的第三方库?


PIPIONE
浏览 171回答 3
3回答

摇曳的蔷薇

标准库中没有定义 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 changefor d := start; d.Month() == start.Month(); d = d.AddDate(0, 0, 1) {    // do stuff with d}

holdtom

方式只有在迭代在一个月内时才有效。更好的迭代方法是使用时间的纪元格式。例如,对于 oneDay,我们知道它是 86400 秒。我们可以做以下oneDay := int64(86400) // a day in seconds.startDate := int64(1519862400)endDate := int64(1520640000)for timestamp := startDate; timestamp <= endDate; timestamp += oneDay {&nbsp; &nbsp;// do your work}简单且适用于迭代日。对于月份,这种方式行不通,因为每个月都有不同的日子。我只有与@jussius 类似的想法,但会进行调整以适用于月份迭代。

至尊宝的传说

我很想比较日期func LeqDates(a, b time.Time) bool {&nbsp; &nbsp; year1, month1, day1 := a.Date()&nbsp; &nbsp; year2, month2, day2 := b.Date()&nbsp; &nbsp; if year1 < year2 {&nbsp; &nbsp; &nbsp; &nbsp; return true&nbsp; &nbsp; } else if year1 <= year2 && month1 < month2 {&nbsp; &nbsp; &nbsp; &nbsp; return true&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; return year1 <= year2 && month1 <= month2 && day1 <= day2&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go