package common import ( "fmt" "time" "github.com/gogf/gf/os/gtime" ) /* GetCNStartOfWeek 获取国内意义上一周的第一天(周一) 外国认为是周日 */ func GetCNStartOfWeek(time *gtime.Time) *gtime.Time { day := int(time.Weekday()) if day == 0 { return time.AddDate(0, 0, -6) } else { return time.AddDate(0, 0, -day+1) } } /* GetCNEndOfWeek 获取国内意义上一周的第七天(周日) 外国认为是周六 */ func GetCNEndOfWeek(time *gtime.Time) *gtime.Time { day := int(time.Weekday()) if day == 0 { return time.AddDate(0, 0, 0).EndOfDay() } else { return time.AddDate(0, 0, 7-day).EndOfDay() } } // GetCNWeekday 返回数字类型的周信息(1,2,3,4,5,6,7) func GetCNWeekday(time *gtime.Time) int { day := int(time.Weekday()) if day == 0 { return 7 } else { return day } } // GetNextTimeNode 获取当前时间的下一个预约节点 func GetNextTimeNode(signOutTime *gtime.Time) *gtime.Time { currentMinute := signOutTime.Minute() // 当分钟为00或者30的时候直接返回 if currentMinute == 30 && signOutTime.Second() == 0 || currentMinute == 0 && signOutTime.Second() == 0 { return signOutTime } if currentMinute >= 30 { nextTimeStr := fmt.Sprintf("%v-%.2v-%.2v %.2v:%.2v:%.2v", signOutTime.Year(), signOutTime.Month(), signOutTime.Day(), signOutTime.Hour()+1, 0, 0) return gtime.NewFromStr(nextTimeStr) } nextTimeStr := fmt.Sprintf("%v-%.2v-%.2v %.2v:%.2v:%.2v", signOutTime.Year(), signOutTime.Month(), signOutTime.Day(), signOutTime.Hour(), 30, 0) return gtime.NewFromStr(nextTimeStr) } func SliceIntcontains(s []int, ele int) bool { for _, i := range s { if i == ele { return true } } return false } func Weekday(t time.Time) []time.Time { year, month, day := t.Date() var begin time.Time if weekday := t.Weekday(); weekday == 0 { begin = time.Date(year, month, day-6, 0, 0, 0, 0, t.Location()) } else { begin = time.Date(year, month, day-int(weekday)+1, 0, 0, 0, 0, t.Location()) } ret := []time.Time{} for i := 0; i < 7; i++ { ret = append(ret, begin.Add(time.Hour*24*time.Duration(i))) } return ret }