为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
PIPIONE 2022-01-17 16:22:21
有没有办法在go某个特定月份进行迭代并从中获取所有time.Date对象?例如,在 April 上进行迭代将导致04012016until 04312016:for _, dayInMonth := range date.April {    // do stuff with dates returned    }(目前上面的代码显然不会工作)。或者,如果不是标准库的一部分,是否有与moment.js等效的第三方库?
查看完整描述

3 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

标准库中没有定义 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

}


查看完整回答
反对 回复 2022-01-17
?
holdtom

TA贡献1805条经验 获得超10个赞

方式只有在迭代在一个月内时才有效。更好的迭代方法是使用时间的纪元格式。


例如,对于 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 类似的想法,但会进行调整以适用于月份迭代。


查看完整回答
反对 回复 2022-01-17
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

我很想比较日期


func LeqDates(a, b time.Time) bool {

    year1, month1, day1 := a.Date()

    year2, month2, day2 := b.Date()


    if year1 < year2 {

        return true

    } else if year1 <= year2 && month1 < month2 {

        return true

    } else {

        return year1 <= year2 && month1 <= month2 && day1 <= day2

    }

}


查看完整回答
反对 回复 2022-01-17
  • 3 回答
  • 0 关注
  • 170 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信