package utils import ( "slices" "time" ) // IsOverlap 判断两个时间段是否有重叠 func IsOverlap(start1, end1, start2, end2 string) bool { layout := "2006-01-02" startTime1, _ := time.Parse(layout, start1) endTime1, _ := time.Parse(layout, end1) startTime2, _ := time.Parse(layout, start2) endTime2, _ := time.Parse(layout, end2) // 如果一个时间段的开始时间在另一个时间段之后,或结束时间在另一个时间段之前,则无重叠 if startTime1.After(endTime2) || endTime1.Before(startTime2) { return false } return true } func GetMonthByOffset(offset int) time.Time { return time.Now().AddDate(0, offset, 0) } func GetDayByOffset(offset int) time.Time { return time.Now().AddDate(0, 0, offset) } // GetLastMonthPeriod 返回上个月的月初时间和月末时间 func GetLastMonthPeriod(now time.Time) (firstDay time.Time, lastDay time.Time) { // 获取本个月的第一天的日期(即本月月初) firstDayOfThisMonth := time.Date(now.Year(), now.Month(), 1, 0, 0, 0, 0, now.Location()) nextMonth := now.AddDate(0, 1, 0) // 获取下月第一天的日期(即下个月月初) firstDayOfNextMonth := time.Date(nextMonth.Year(), nextMonth.Month(), 1, 0, 0, 0, 0, now.Location()) // 下个月月末时间即为本月月初减去一秒 lastDayOfThisMonth := firstDayOfNextMonth.Add(-time.Second) return firstDayOfThisMonth, lastDayOfThisMonth } func GetMonthDuration(d time.Time) (duration int) { return d.AddDate(0, 1, -1).Day() } func CalcWorkHour(begin, end time.Time, dayOff []time.Weekday, cellHour float32) (workHour float32, workingCount int) { var currentTime = begin for { if currentTime.After(end) { break } if slices.Contains(dayOff, currentTime.Weekday()) { // nothing } else { workHour += cellHour workingCount++ } currentTime = currentTime.AddDate(0, 0, 1) // .Add(24 * time.Hour) } return float32(workHour), workingCount }