all repos

mugit @ 43a845886b6094d672e39a46de5c58551bafcaac

🐮 git server that your cow will love

mugit/internal/humanize/time.go (view raw)

Oleksandr Smirnov Oleksandr Smirnov
olexsmir@gmail.com
refactor: remove humanize dependency, 4 months ago
1
package humanize
2
3
import (
4
	"fmt"
5
	"time"
6
)
7
8
// Time returns a human-readable relative time string (e.g., "3 hours ago").
9
func Time(t time.Time) string {
10
	return formatDuration(time.Since(t)) + " ago"
11
}
12
13
func formatDuration(d time.Duration) string {
14
	switch {
15
	case d < time.Minute:
16
		return "less than a minute"
17
	case d < 2*time.Minute:
18
		return "1 minute"
19
	case d < time.Hour:
20
		return fmt.Sprintf("%d minutes", d/time.Minute)
21
	case d < 2*time.Hour:
22
		return "1 hour"
23
	case d < 24*time.Hour:
24
		return fmt.Sprintf("%d hours", d/time.Hour)
25
	case d < 48*time.Hour:
26
		return "1 day"
27
	case d < 30*24*time.Hour:
28
		return fmt.Sprintf("%d days", d/(24*time.Hour))
29
	case d < 60*24*time.Hour:
30
		return "1 month"
31
	case d < 365*24*time.Hour:
32
		return fmt.Sprintf("%d months", d/(30*24*time.Hour))
33
	case d < 2*365*24*time.Hour:
34
		return "1 year"
35
	default:
36
		return fmt.Sprintf("%d years", d/(365*24*time.Hour))
37
	}
38
}