/* * @FileName: getTime.go * @Author: JJXu * @CreateTime: 2022/3/1 下午6:35 * @Description: */ package stime import ( "fmt" "time" ) func StrNowDate() string { return TimeToString(time.Now(), Format_Normal_YMD) } func StrNowYearMonth() string { return TimeToString(time.Now(), Format_Normal_YM) } // ThisMorming 今天凌晨 func ThisMorming(format string) (strTime string) { thisTime := time.Now() year := thisTime.Year() month := MonthStrMap[thisTime.Month().String()] day := fmt.Sprintf("%02d", thisTime.Day()) strTime = fmt.Sprintf("%v-%v-%v 00:00:00", year, month, day) if format != Format_Normal_YMDhms { t1, _ := time.ParseInLocation(Format_Normal_YMDhms, strTime, Loc.Shanghai()) strTime = t1.Format(format) } return strTime } // ThisMorningUnix 获取当日凌晨的时间戳 func ThisMorningToUnix() int64 { thist := time.Now() zero_tm := time.Date(thist.Year(), thist.Month(), thist.Day(), 0, 0, 0, 0, thist.Location()).Unix() return zero_tm } // TomorrowMorning 第二天凌晨 func TomorrowMorning(baseTime time.Time) *time.Time { year := baseTime.Year() month := MonthStrMap[baseTime.Month().String()] day := fmt.Sprintf("%02d", baseTime.Day()+1) strTime := fmt.Sprintf("%v-%v-%v 00:00:00", year, month, day) res, _ := StringToTime(strTime) return res } // ThisTimeUnix 获取当前时间的时间戳 func CurrentimeToUnix() int64 { return time.Now().Unix() } // Currentime 获取当前时间 func Currentime(format string) (strTime string) { strTime = time.Now().Format(format) return } // HoursAgo 若干小时之前的时间 func HoursAgo(hours time.Duration, format string) (lastTimeStr string) { lastStamp := time.Now().Unix() - int64((time.Hour * hours).Seconds()) lastTime := time.Unix(lastStamp, 0).In(Loc.Shanghai()) lastTimeStr = lastTime.Format(format) return } // TimeToString 时间转字符串 func TimeToString(t time.Time, format string) string { return t.Format(format) } // 计算指定月份的天数 func YearMonthToDayNumber(year int, month int) int { // 有31天的月份 day31 := map[int]bool{ 1: true, 3: true, 5: true, 7: true, 8: true, 10: true, 12: true, } if day31[month] == true { return 31 } // 有30天的月份 day30 := map[int]bool{ 4: true, 6: true, 9: true, 11: true, } if day30[month] == true { return 30 } // 计算是平年还是闰年 if (year%4 == 0 && year%100 != 0) || year%400 == 0 { // 得出2月的天数 return 29 } // 得出2月的天数 return 28 } // 求时间差(返回一个数字,该数字单位由传过来的unit决定。若unit为60,则单位是分钟。) func GetDiffTime(start_time string, end_time string, unit int64) int64 { // 转成时间戳 if len(start_time) == 10 { start_time = fmt.Sprintf("%v 00:00:00", start_time) } if len(end_time) == 10 { end_time = fmt.Sprintf("%v 00:00:00", end_time) } startUnix, _ := time.ParseInLocation("2006-01-02 15:04:05", start_time, Loc.Shanghai()) endUnix, _ := time.ParseInLocation("2006-01-02 15:04:05", end_time, Loc.Shanghai()) startTime := startUnix.Unix() endTime := endUnix.Unix() // 求相差天数 date := (endTime - startTime) / unit return date } func TimeSince(pastTime string, format string) string { t, err := time.Parse(format, pastTime) if err != nil { return "" } diff := time.Since(t) if diff.Minutes() < 15 { return "刚刚" } else if diff.Minutes() >= 15 && diff.Minutes() < 30 { return "15分钟前" } else if diff.Minutes() >= 30 && diff.Minutes() < 60 { return "半小时前" } else if diff.Hours() >= 1 && diff.Hours() < 24 { return fmt.Sprintf("%d小时前", int(diff.Hours())) } else if diff.Hours() >= 24 && diff.Hours() < 24*15 { return fmt.Sprintf("%d天前", int(diff.Hours()/24)) } else if diff.Hours() < 24*30 { return "半月前" } else if diff.Hours() < 24*30*6 { //小于半年 return fmt.Sprintf("%d月前", int(diff.Hours()/24/30)) } else if diff.Hours() < 24*365 { //小于1年 return "半年前" } else { return t.Format("2006-01-02 15:04:05") } }