X Tutup
Skip to content

Commit d7d575f

Browse files
committed
support more time units
1 parent a4b9701 commit d7d575f

File tree

2 files changed

+27
-12
lines changed

2 files changed

+27
-12
lines changed

utils/utils.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,16 +92,26 @@ func Pluralize(num int, thing string) string {
9292
}
9393
}
9494

95+
func fmtDuration(amount int, unit string) string {
96+
return fmt.Sprintf("about %s ago", Pluralize(amount, unit))
97+
}
98+
9599
func FuzzyAgo(ago time.Duration) string {
96100
if ago < time.Minute {
97101
return "less than a minute ago"
98102
}
99103
if ago < time.Hour {
100-
return fmt.Sprintf("about %s ago", Pluralize(int(ago.Minutes()), "minute"))
104+
return fmtDuration(int(ago.Minutes()), "minute")
101105
}
102106
if ago < 24*time.Hour {
103-
return fmt.Sprintf("about %s ago", Pluralize(int(ago.Hours()), "hour"))
107+
return fmtDuration(int(ago.Hours()), "hour")
108+
}
109+
if ago < 30*24*time.Hour {
110+
return fmtDuration(int(ago.Hours())/24, "day")
111+
}
112+
if ago < 365*24*time.Hour {
113+
return fmtDuration(int(ago.Hours())/24/30, "month")
104114
}
105115

106-
return fmt.Sprintf("about %s ago", Pluralize(int(ago.Hours()/24), "day"))
116+
return fmtDuration(int(ago.Hours()/24/365), "year")
107117
}

utils/utils_test.go

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,20 @@ import (
88
func TestFuzzyAgo(t *testing.T) {
99

1010
cases := map[string]string{
11-
"1s": "less than a minute ago",
12-
"30s": "less than a minute ago",
13-
"1m08s": "about 1 minute ago",
14-
"15m0s": "about 15 minutes ago",
15-
"59m10s": "about 59 minutes ago",
16-
"1h10m02s": "about 1 hour ago",
17-
"15h0m01s": "about 15 hours ago",
18-
"30h10m": "about 1 day ago",
19-
"50h": "about 2 days ago",
11+
"1s": "less than a minute ago",
12+
"30s": "less than a minute ago",
13+
"1m08s": "about 1 minute ago",
14+
"15m0s": "about 15 minutes ago",
15+
"59m10s": "about 59 minutes ago",
16+
"1h10m02s": "about 1 hour ago",
17+
"15h0m01s": "about 15 hours ago",
18+
"30h10m": "about 1 day ago",
19+
"50h": "about 2 days ago",
20+
"720h05m": "about 1 month ago",
21+
"3000h10m": "about 4 months ago",
22+
"8760h59m": "about 1 year ago",
23+
"17601h59m": "about 2 years ago",
24+
"262800h19m": "about 30 years ago",
2025
}
2126

2227
for duration, expected := range cases {

0 commit comments

Comments
 (0)
X Tutup