tstime: fix ParseDuration for '6' digit (#6363)

The cutset provided to strings.TrimRight was missing the digit '6',
making it such that we couldn't parse something like "365d".

Signed-off-by: Joe Tsai <joetsai@digital-static.net>
pull/6365/head
Joe Tsai 2 years ago committed by GitHub
parent eff62b7b1b
commit ec1e67b1ab
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -144,15 +144,15 @@ func Parse3339B(b []byte) (time.Time, error) {
return parse3339m(mem.B(b)) return parse3339m(mem.B(b))
} }
// ParseDuration is more expressive than time.ParseDuration, also accepting d // ParseDuration is more expressive than time.ParseDuration,
// (days) and w (weeks) literals. // also accepting 'd' (days) and 'w' (weeks) literals.
func ParseDuration(s string) (time.Duration, error) { func ParseDuration(s string) (time.Duration, error) {
for { for {
end := strings.IndexAny(s, "dw") end := strings.IndexAny(s, "dw")
if end < 0 { if end < 0 {
break break
} }
start := end - (len(s[:end]) - len(strings.TrimRight(s[:end], "012345789"))) start := end - (len(s[:end]) - len(strings.TrimRight(s[:end], "0123456789")))
n, err := strconv.Atoi(s[start:end]) n, err := strconv.Atoi(s[start:end])
if err != nil { if err != nil {
return 0, err return 0, err

@ -109,6 +109,10 @@ func TestParseDuration(t *testing.T) {
}{ }{
{"1h", time.Hour}, {"1h", time.Hour},
{"1d", 24 * time.Hour}, {"1d", 24 * time.Hour},
{"365d", 365 * 24 * time.Hour},
{"12345d", 12345 * 24 * time.Hour},
{"67890d", 67890 * 24 * time.Hour},
{"100d", 100 * 24 * time.Hour},
{"1d1d", 48 * time.Hour}, {"1d1d", 48 * time.Hour},
{"1h1d", 25 * time.Hour}, {"1h1d", 25 * time.Hour},
{"1d1h", 25 * time.Hour}, {"1d1h", 25 * time.Hour},

Loading…
Cancel
Save