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