如何解决获取Go中前3个月的首个和最后一个日期
如何获取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,-goneDaysOfMonth+1)
lastDay := last3Month.AddDate(0,3,-goneDaysOfMonth)
timeLayout := "2006-01-02"
fmt.Println(firstDay.Format(timeLayout))
fmt.Println(lastDay.Format(timeLayout))
,
@ttrasn的答案很好(您肯定应该使用时间包!),但是我觉得值得发布一种替代方法(playground):
year,month,_ := currentTime.Date()
startTime := time.Date(year,month-3,1,currentTime.Location())
endTime := startTime.AddDate(0,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
的时间部分)。
所以我的解决方案的好处是计算出的时间范围涵盖了整个月。这与您的要求没有直接关系(因为未使用时间组件),但可能很重要(例如在进行数据库查询时)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。