package utils import ( "fmt" "time" ) // 日期计算工具 const DateFormatLayout = "2006-01-02" func TimeDate() string { return Time().Format(DateFormatLayout) } // 期任务格式转化为日任务格式 func PeriodNoToDailyDate(periodNo string) (string, error) { periodTime, err := time.Parse(PeriodNoFormatLayout, periodNo) if err != nil { return "", fmt.Errorf("parse period number failed: %w", err) } return periodTime.Format(DateFormatLayout), nil } func Today20060102Format() string { return Time().Format(DateFormatLayout) } func ParseDateInLocation(date string) (time.Time, error) { return time.ParseInLocation(DateFormatLayout, date, loc()) } // 相隔天数 func CalculateApartDays(beginDate, endDate string) (int, error) { date1, err := time.Parse("2006-01-02", beginDate) if err != nil { return 0, fmt.Errorf("日期解析错误:%s", err) } date2, err := time.Parse("2006-01-02", endDate) if err != nil { return 0, fmt.Errorf("日期解析错误:%s", err) } // 计算天数差 days := int(date2.Sub(date1).Hours() / 24) return days, nil } // 计算相隔月数 func CalculateApartMon(beginDate, endDate string) (int, error) { date1, err := time.Parse("2006-01-02", beginDate) if err != nil { return 0, fmt.Errorf("日期解析错误:%s", err) } date2, err := time.Parse("2006-01-02", endDate) if err != nil { return 0, fmt.Errorf("日期解析错误:%s", err) } months := (date2.Year()-date1.Year())*12 + int(date2.Month()-date1.Month()) // 如果第二个日期的日小于第一个日期的日,则月数减1 if date2.Day() < date1.Day() { months-- } return months, nil } // 改变指定天数 func ChangeDay(dateStr string, n int) (string, error) { // 解析日期 date, err := time.Parse("2006-01-02", dateStr) if err != nil { return "", fmt.Errorf("日期解析错误:%s", err) } // 获取前一天的日期 previousDay := date.AddDate(0, 0, n) // 格式化为相同的字符串格式 return previousDay.Format("2006-01-02"), nil } func AfterOneDay(dateStr string) (string, error) { // 解析日期 date, err := time.Parse("2006-01-02", dateStr) if err != nil { return "", fmt.Errorf("日期解析错误:%s", err) } // 获取前一天的日期 previousDay := date.AddDate(0, 0, 1) // 格式化为相同的字符串格式 return previousDay.Format("2006-01-02"), nil } func BeforeDay(dateStr string) (string, error) { // 解析日期 date, err := time.Parse("2006-01-02", dateStr) if err != nil { return "", fmt.Errorf("日期解析错误:%s", err) } // 获取前一天的日期 previousDay := date.AddDate(0, 0, -1) // 格式化为相同的字符串格式 return previousDay.Format("2006-01-02"), nil } // 解析日期为TIME对象 func ParseDate(date string) time.Time { dateTime, err := time.ParseInLocation(DateFormatLayout, date, loc()) if err != nil { return Time() } return dateTime }