htmgo/examples/hackernews/internal/timeformat/time.go
2024-10-10 17:00:20 -05:00

39 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))))
}
}