40 lines
955 B
Go
40 lines
955 B
Go
|
|
package timeformat
|
||
|
|
|
||
|
|
import (
|
||
|
|
"fmt"
|
||
|
|
"time"
|
||
|
|
)
|
||
|
|
|
||
|
|
func ParseUnix(t int64) time.Time {
|
||
|
|
return time.UnixMilli(t * 1000)
|
||
|
|
}
|
||
|
|
|
||
|
|
func RelativeTime(t time.Time) string {
|
||
|
|
now := time.Now()
|
||
|
|
diff := now.Sub(t)
|
||
|
|
|
||
|
|
var pluralize = func(s string) string {
|
||
|
|
if s[0] == '1' {
|
||
|
|
return s[:len(s)-5] + " ago"
|
||
|
|
}
|
||
|
|
return s
|
||
|
|
}
|
||
|
|
|
||
|
|
switch {
|
||
|
|
case diff < time.Minute:
|
||
|
|
return "just now"
|
||
|
|
case diff < time.Hour:
|
||
|
|
return pluralize(fmt.Sprintf("%d minutes ago", int(diff.Minutes())))
|
||
|
|
case diff < time.Hour*24:
|
||
|
|
return pluralize(fmt.Sprintf("%d hours ago", int(diff.Hours())))
|
||
|
|
case diff < time.Hour*24*7:
|
||
|
|
return pluralize(fmt.Sprintf("%d days ago", int(diff.Hours()/24)))
|
||
|
|
case diff < time.Hour*24*30:
|
||
|
|
return pluralize(fmt.Sprintf("%d weeks ago", int(diff.Hours()/(24*7))))
|
||
|
|
case diff < time.Hour*24*365:
|
||
|
|
return pluralize(fmt.Sprintf("%d months ago", int(diff.Hours()/(24*30))))
|
||
|
|
default:
|
||
|
|
return pluralize(fmt.Sprintf("%d years ago", int(diff.Hours()/(24*365))))
|
||
|
|
}
|
||
|
|
}
|