fix
This commit is contained in:
153
backend-old/internal/utils/time.go
Normal file
153
backend-old/internal/utils/time.go
Normal file
@ -0,0 +1,153 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
)
|
||||
|
||||
// FormatTime 格式化时间为字符串
|
||||
func FormatTime(t time.Time, layout string) string {
|
||||
if layout == "" {
|
||||
layout = "2006-01-02 15:04:05"
|
||||
}
|
||||
return t.Format(layout)
|
||||
}
|
||||
|
||||
// ParseTime 解析时间字符串
|
||||
func ParseTime(timeStr, layout string) (time.Time, error) {
|
||||
if layout == "" {
|
||||
layout = "2006-01-02 15:04:05"
|
||||
}
|
||||
return time.Parse(layout, timeStr)
|
||||
}
|
||||
|
||||
// GetTimeAgo 获取相对时间描述
|
||||
func GetTimeAgo(t time.Time) string {
|
||||
now := time.Now()
|
||||
diff := now.Sub(t)
|
||||
|
||||
if diff < time.Minute {
|
||||
return "刚刚"
|
||||
}
|
||||
|
||||
if diff < time.Hour {
|
||||
minutes := int(diff.Minutes())
|
||||
return fmt.Sprintf("%d分钟前", minutes)
|
||||
}
|
||||
|
||||
if diff < 24*time.Hour {
|
||||
hours := int(diff.Hours())
|
||||
return fmt.Sprintf("%d小时前", hours)
|
||||
}
|
||||
|
||||
if diff < 30*24*time.Hour {
|
||||
days := int(diff.Hours() / 24)
|
||||
return fmt.Sprintf("%d天前", days)
|
||||
}
|
||||
|
||||
if diff < 365*24*time.Hour {
|
||||
months := int(diff.Hours() / (24 * 30))
|
||||
return fmt.Sprintf("%d个月前", months)
|
||||
}
|
||||
|
||||
years := int(diff.Hours() / (24 * 365))
|
||||
return fmt.Sprintf("%d年前", years)
|
||||
}
|
||||
|
||||
// IsToday 检查时间是否为今天
|
||||
func IsToday(t time.Time) bool {
|
||||
now := time.Now()
|
||||
return t.Year() == now.Year() && t.YearDay() == now.YearDay()
|
||||
}
|
||||
|
||||
// IsThisWeek 检查时间是否为本周
|
||||
func IsThisWeek(t time.Time) bool {
|
||||
now := time.Now()
|
||||
year, week := now.ISOWeek()
|
||||
tYear, tWeek := t.ISOWeek()
|
||||
return year == tYear && week == tWeek
|
||||
}
|
||||
|
||||
// IsThisMonth 检查时间是否为本月
|
||||
func IsThisMonth(t time.Time) bool {
|
||||
now := time.Now()
|
||||
return t.Year() == now.Year() && t.Month() == now.Month()
|
||||
}
|
||||
|
||||
// IsThisYear 检查时间是否为今年
|
||||
func IsThisYear(t time.Time) bool {
|
||||
now := time.Now()
|
||||
return t.Year() == now.Year()
|
||||
}
|
||||
|
||||
// GetWeekRange 获取本周的开始和结束时间
|
||||
func GetWeekRange(t time.Time) (start, end time.Time) {
|
||||
// 获取周一作为周开始
|
||||
weekday := int(t.Weekday())
|
||||
if weekday == 0 {
|
||||
weekday = 7 // 周日为7
|
||||
}
|
||||
|
||||
start = t.AddDate(0, 0, -(weekday-1))
|
||||
start = time.Date(start.Year(), start.Month(), start.Day(), 0, 0, 0, 0, start.Location())
|
||||
|
||||
end = start.AddDate(0, 0, 6)
|
||||
end = time.Date(end.Year(), end.Month(), end.Day(), 23, 59, 59, 999999999, end.Location())
|
||||
|
||||
return start, end
|
||||
}
|
||||
|
||||
// GetMonthRange 获取本月的开始和结束时间
|
||||
func GetMonthRange(t time.Time) (start, end time.Time) {
|
||||
start = time.Date(t.Year(), t.Month(), 1, 0, 0, 0, 0, t.Location())
|
||||
end = start.AddDate(0, 1, -1)
|
||||
end = time.Date(end.Year(), end.Month(), end.Day(), 23, 59, 59, 999999999, end.Location())
|
||||
|
||||
return start, end
|
||||
}
|
||||
|
||||
// GetYearRange 获取本年的开始和结束时间
|
||||
func GetYearRange(t time.Time) (start, end time.Time) {
|
||||
start = time.Date(t.Year(), 1, 1, 0, 0, 0, 0, t.Location())
|
||||
end = time.Date(t.Year(), 12, 31, 23, 59, 59, 999999999, t.Location())
|
||||
|
||||
return start, end
|
||||
}
|
||||
|
||||
// Timestamp 获取当前时间戳(秒)
|
||||
func Timestamp() int64 {
|
||||
return time.Now().Unix()
|
||||
}
|
||||
|
||||
// TimestampMilli 获取当前时间戳(毫秒)
|
||||
func TimestampMilli() int64 {
|
||||
return time.Now().UnixNano() / 1e6
|
||||
}
|
||||
|
||||
// FromTimestamp 从时间戳创建时间对象
|
||||
func FromTimestamp(timestamp int64) time.Time {
|
||||
return time.Unix(timestamp, 0)
|
||||
}
|
||||
|
||||
// FromTimestampMilli 从毫秒时间戳创建时间对象
|
||||
func FromTimestampMilli(timestamp int64) time.Time {
|
||||
return time.Unix(0, timestamp*1e6)
|
||||
}
|
||||
|
||||
// FormatDuration 格式化持续时间
|
||||
func FormatDuration(d time.Duration) string {
|
||||
if d < time.Minute {
|
||||
return fmt.Sprintf("%.0f秒", d.Seconds())
|
||||
}
|
||||
|
||||
if d < time.Hour {
|
||||
return fmt.Sprintf("%.0f分钟", d.Minutes())
|
||||
}
|
||||
|
||||
if d < 24*time.Hour {
|
||||
return fmt.Sprintf("%.1f小时", d.Hours())
|
||||
}
|
||||
|
||||
days := d.Hours() / 24
|
||||
return fmt.Sprintf("%.1f天", days)
|
||||
}
|
||||
Reference in New Issue
Block a user