登录
首页 >  Golang >  Go问答

获取 Go 语言中前 3 个月的第一个和最后一个日期

来源:stackoverflow

时间:2024-03-02 13:33:24 355浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《获取 Go 语言中前 3 个月的第一个和最后一个日期》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

问题内容

如何在 go 中获取最近 3 个月的第一个和最后一个日期? 示例:

{"start": "2020-05-01", "end": "2020-07-31"}

解决方案


您可以使用golang time包。

currenttime := time.now()

last3month := currenttime.adddate(0,-3,0)

gonedaysofmonth := last3month.day()

firstday := last3month.adddate(0,0,-gonedaysofmonth+1)
lastday  := last3month.adddate(0,3,-gonedaysofmonth)

timelayout := "2006-01-02"

fmt.println(firstday.format(timelayout))
fmt.println(lastday.format(timelayout))

Go Playground

@ttrasn 的答案效果很好(并且您绝对应该使用时间包!),但是我认为值得发布替代方法(playground):

year, month, _ := currenttime.date()
starttime := time.date(year, month-3, 1, 0, 0, 0, 0, currenttime.location())
endtime := starttime.adddate(0, 3, 0).add(-time.nanosecond)

const layout = "2006-01-02"
fmt.println(starttime.format(layout), endtime.format(layout))

使用 time.date 可以轻松地将 starttime 设置为所需月份的开始时间(时间部分设置为午夜)。请注意,time.date 将正确处理负数月份。

为了计算出结束时间,我们添加三个月,然后减去一纳秒(将时间带回上个月末)。

今天运行这个(以 utc 时间计算),计算出的完整值是:

starttime: 2020-05-01 00:00:00 +0000 utc
endtime:   2020-07-31 23:59:59.999999999 +0000 utc

使用 @ttrasn 的解决方案,这些将是:

firstDay: 2020-05-01 08:56:46.000001 +0000 UTC
lastDay:  2020-07-31 08:56:46.000001 +0000 UTC

(时间部分取决于 currenttime 的时间部分)。

所以我的解决方案的好处是计算的时间范围涵盖整个月。这与您的要求没有直接关系(因为不使用时间组件),但可能很重要(例如在进行数据库查询时)。

今天关于《获取 Go 语言中前 3 个月的第一个和最后一个日期》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>