主要用到了AddDate对时间进行加减天数,
time.Weekday()得到今天是周几,周日对应的是0,周一到周六对应1,2,3,4,5,6
我们接下来的计算代码是一周从周一开始周日结束,既周一到周日为同一周。
package main
import (
"fmt"
"time"
)
func main(){
now := time.Now()
lastMonday ,err:= GetLastWeekMonday(now,"20060102")
lastSunday ,err:= GetLastWeekSunday(now,"20060102")
fmt.Println(err)
fmt.Println(lastMonday)
fmt.Println(lastSunday)
}
//获取本周周一的日期
func GetMondayOfWeek(t time.Time, fmtStr string) (dayStr string) {
dayObj := GetZeroTime(t)
if t.Weekday() == time.Monday {
//修改hour、min、sec = 0后格式化
dayStr = dayObj.Format(fmtStr)
}else{
offset := int(time.Monday - t.Weekday())
if offset > 0 {
offset = -6
}
dayStr = dayObj.AddDate(0, 0, offset).Format(fmtStr)
}
return
}
//获取上周周一日期
func GetLastWeekMonday(t time.Time, fmtStr string) (day string, err error) {
monday := GetMondayOfWeek(t, fmtStr)
dayObj, err := time.Parse(fmtStr, monday)
if err != nil{
return
}
day = dayObj.AddDate(0, 0, -7).Format(fmtStr)
return
}
//获取上周周日日期
func GetLastWeekSunday(t time.Time, fmtStr string) (day string, err error) {
monday := GetMondayOfWeek(t, fmtStr)
dayObj, err := time.Parse(fmtStr, monday)
if err != nil{
return
}
day = dayObj.AddDate(0, 0, -1).Format(fmtStr)
return
}
//获取某一天的0点时间
func GetZeroTime(t time.Time) time.Time {
return time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, t.Location())
}
结果:
<nil>
20201228
20210103