package utils import ( "fmt" "go_dreamfactory/sys/configure" "math" "time" "github.com/jinzhu/now" ) // 判断时间点处于今天 func IsToday(d int64) bool { tt := time.Unix(d, 0) now := configure.Now() return tt.Year() == now.Year() && tt.Month() == now.Month() && tt.Day() == now.Day() } func IsNextToday(d int64) bool { d += 24 * 3600 tt := time.Unix(d, 0) now := configure.Now() return tt.Year() == now.Year() && tt.Month() == now.Month() && tt.Day() == now.Day() } // 判断是否是出于同一周 func IsSameWeek(d int64) bool { // 将时间戳转换为 time.Time 类型 time1 := time.Unix(d, 0) time2 := configure.Now() // 获取时间戳所属的年份和周数 year1, week1 := time1.ISOWeek() year2, week2 := time2.ISOWeek() // 判断是否同一年同一周 if year1 == year2 && week1 == week2 { return true } else { return false } } // 判断是否大于1周 func IsAfterWeek(d int64) bool { tt := time.Unix(d, 0) nowt := configure.Now() if !tt.Before(nowt) { return false } at := now.With(tt).AddDate(0, 0, 7).Unix() return nowt.Unix() >= at } // 是否今日首次 func IsFirstTody(timestamp int64) bool { now := configure.Now() if timestamp == 0 || timestamp > now.Unix() { return false } tt := time.Unix(timestamp, 0) if !IsToday(timestamp) { if tt.Before(now) { return true } } return false } // 获取当前时间戳下一天0点时间戳 func GetZeroTime(curTime int64) int64 { currentTime := time.Unix(curTime, 0) startTime := time.Date(currentTime.Year(), currentTime.Month(), currentTime.Day(), 0, 0, 0, 0, currentTime.Location()) return startTime.Unix() + 86400 //3600*24 } func GetCurZeroTime(curTime int64) int64 { currentTime := time.Unix(curTime, 0) startTime := time.Date(currentTime.Year(), currentTime.Month(), currentTime.Day(), 0, 0, 0, 0, currentTime.Location()) return startTime.Unix() } func IsYestoday(timestamp int64) bool { tt := time.Unix(timestamp, 0) yesTime := configure.Now().AddDate(0, 0, -1) return tt.Year() == yesTime.Year() && tt.Month() == yesTime.Month() && tt.Day() == yesTime.Day() } // 确定换算规则 现实1H = 虚拟4H // 计算:根据开服时间为起始时间,计算当前时间与起始时间的差值,计算虚拟当前时间 func MatrixingHour(beginTime string) (t time.Time) { location, err := time.LoadLocation("Asia/Shanghai") if err != nil { return } myConfig := &now.Config{ WeekStartDay: time.Monday, TimeLocation: location, TimeFormats: []string{"2006-01-02 15:04:05"}, } serverStartTime, _ := myConfig.Parse(beginTime) n := configure.Now() timeSub := n.Sub(serverStartTime) hourSub := timeSub.Hours() * 2 hh, _ := time.ParseDuration("1h") fmt.Println(hourSub, math.Ceil(hourSub)) t2 := serverStartTime.Add(hh * time.Duration(math.Ceil(hourSub))) fmt.Println(t2) return } // 时间戳格式化字符串日期 func FormatStr(timestamp int64, format string) string { if format == "" { format = "2006-01-02 15:04:05" } return time.Unix(timestamp, 0).Format(format) } func AddHour(hour int) time.Time { return configure.Now().Add(time.Duration(hour) * time.Hour) } // CD func IsInCDHour(cdTime int64) bool { if cdTime == 0 { return false } return configure.Now().Unix() < cdTime } // 获取本月的开始和结束的时间戳 func GetMonthStart() int64 { t := configure.Now() monthStartDay := t.AddDate(0, 0, -t.Day()+1) monthStartTime := time.Date(monthStartDay.Year(), monthStartDay.Month(), monthStartDay.Day(), 0, 0, 0, 0, t.Location()) _d1 := monthStartTime.Unix() return _d1 } // 获取本月的结束的时间戳 func GetMonthEnd(curTime int64) int64 { t := time.Unix(curTime, 0) monthStartDay := t.AddDate(0, 0, -t.Day()+1) monthStartTime := time.Date(monthStartDay.Year(), monthStartDay.Month(), monthStartDay.Day(), 0, 0, 0, 0, t.Location()) monthEndDay := monthStartTime.AddDate(0, 1, -1) monthEndTime := time.Date(monthEndDay.Year(), monthEndDay.Month(), monthEndDay.Day(), 23, 59, 59, 0, t.Location()) _d2 := monthEndTime.Unix() return _d2 } // 获取今天零点时间戳 func GetTodayZeroTime(curTime int64) int64 { currentTime := time.Unix(curTime, 0) startTime := time.Date(currentTime.Year(), currentTime.Month(), currentTime.Day(), 0, 0, 0, 0, currentTime.Location()) return startTime.Unix() } // 计算自然天数 func DiffDays(t1, t2 int64) int { if t1 == t2 { return -1 } if t1 > t2 { t1, t2 = t2, t1 } secOfDay := 3600 * 24 diffDays := 0 secDiff := t2 - t1 if secDiff > int64(secOfDay) { tmpDays := int(secDiff / int64(secOfDay)) t1 += int64(tmpDays) * int64(secOfDay) diffDays += tmpDays } st := time.Unix(t1, 0) et := time.Unix(t2, 0) dateformat := "20060102" if st.Format(dateformat) != et.Format(dateformat) { diffDays += 1 } return diffDays } func WeekIntervalTime(curTime int64) (endTime int64) { now := time.Unix(curTime, 0) offset := int(time.Monday - now.Weekday()) //周日做特殊判断 因为time.Monday = 0 if offset > 0 { offset = -6 } year, month, day := now.Date() thisWeek := time.Date(year, month, day, 0, 0, 0, 0, time.Local) //startTime = thisWeek.AddDate(0, 0, offset+7*week).Unix() endTime = thisWeek.AddDate(0, 0, offset+7).Unix() return endTime }