package services import ( "bytes" "math" "strconv" "time" ) type TimeUtilService struct { } /** * @des 时间转换函数 * @param atime string 要转换的时间戳(秒) * @return string */ func (this *TimeUtilService) StrTime(atime int64) string { var byTime = []int64{365 * 24 * 60 * 60, 30 * 24 * 60 * 60, 7 * 24 * 60 * 60, 24 * 60 * 60, 60 * 60, 60, 1} var unit = []string{"年前", "月前", "周前", "天前", "小时前", "分钟前", "秒前"} now := time.Now().Unix() ct := now - atime if ct < 0 { return "刚刚" } var res string for i := 0; i < len(byTime); i++ { if ct < byTime[i] { continue } var temp = math.Floor(float64(ct / byTime[i])) ct = ct % byTime[i] if temp > 0 { var tempStr string tempStr = strconv.FormatFloat(temp, 'f', -1, 64) res = this.MergeString(tempStr, unit[i]) //此处调用了一个我自己封装的字符串拼接的函数(你也可以自己实现) } break //我想要的形式是精确到最大单位,即:"2天前"这种形式,如果想要"2天12小时36分钟48秒前"这种形式,把此处break去掉,然后把字符串拼接调整下即可 } return res } /** * @des 拼接字符串 * @param args ...string 要被拼接的字符串序列 * @return string */ func (this *TimeUtilService) MergeString(args ...string) string { buffer := bytes.Buffer{} for i := 0; i < len(args); i++ { buffer.WriteString(args[i]) } return buffer.String() }