aboutsummaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorJanos Guljas <janos@resenje.org>2018-09-25 22:57:31 +0800
committerJanos Guljas <janos@resenje.org>2018-09-25 22:57:31 +0800
commit24349144b6c0642755569268bab56b9033743212 (patch)
tree9d9d2b6659fd8a56512dfc807aafe4b733165ae1 /common
parent7d56602391e155e2ce9ba7c261300a1804ab9972 (diff)
parentd3441ebb563439bac0837d70591f92e2c6080303 (diff)
downloadgo-tangerine-24349144b6c0642755569268bab56b9033743212.tar
go-tangerine-24349144b6c0642755569268bab56b9033743212.tar.gz
go-tangerine-24349144b6c0642755569268bab56b9033743212.tar.bz2
go-tangerine-24349144b6c0642755569268bab56b9033743212.tar.lz
go-tangerine-24349144b6c0642755569268bab56b9033743212.tar.xz
go-tangerine-24349144b6c0642755569268bab56b9033743212.tar.zst
go-tangerine-24349144b6c0642755569268bab56b9033743212.zip
Merge branch 'master' into max-stream-peer-servers
Diffstat (limited to 'common')
-rw-r--r--common/format.go42
1 files changed, 42 insertions, 0 deletions
diff --git a/common/format.go b/common/format.go
index fccc29962..6fc21af71 100644
--- a/common/format.go
+++ b/common/format.go
@@ -38,3 +38,45 @@ func (d PrettyDuration) String() string {
}
return label
}
+
+// PrettyAge is a pretty printed version of a time.Duration value that rounds
+// the values up to a single most significant unit, days/weeks/years included.
+type PrettyAge time.Time
+
+// ageUnits is a list of units the age pretty printing uses.
+var ageUnits = []struct {
+ Size time.Duration
+ Symbol string
+}{
+ {12 * 30 * 24 * time.Hour, "y"},
+ {30 * 24 * time.Hour, "mo"},
+ {7 * 24 * time.Hour, "w"},
+ {24 * time.Hour, "d"},
+ {time.Hour, "h"},
+ {time.Minute, "m"},
+ {time.Second, "s"},
+}
+
+// String implements the Stringer interface, allowing pretty printing of duration
+// values rounded to the most significant time unit.
+func (t PrettyAge) String() string {
+ // Calculate the time difference and handle the 0 cornercase
+ diff := time.Since(time.Time(t))
+ if diff < time.Second {
+ return "0"
+ }
+ // Accumulate a precision of 3 components before returning
+ result, prec := "", 0
+
+ for _, unit := range ageUnits {
+ if diff > unit.Size {
+ result = fmt.Sprintf("%s%d%s", result, diff/unit.Size, unit.Symbol)
+ diff %= unit.Size
+
+ if prec += 1; prec >= 3 {
+ break
+ }
+ }
+ }
+ return result
+}