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
|
}
|