bitbucket.org/ai69/amoy@v0.2.3/humanize_duration.go (about) 1 package amoy 2 3 import ( 4 "fmt" 5 "math" 6 "strings" 7 "time" 8 ) 9 10 // Migrate from https://gist.github.com/harshavardhana/327e0577c4fed9211f65 11 12 // HumanizeDuration humanizes time.Duration output to a meaningful value. 13 func HumanizeDuration(duration time.Duration) string { 14 days := int64(duration.Hours() / 24) 15 hours := int64(math.Mod(duration.Hours(), 24)) 16 minutes := int64(math.Mod(duration.Minutes(), 60)) 17 seconds := int64(math.Mod(duration.Seconds(), 60)) 18 chunks := []struct { 19 singularName string 20 amount int64 21 }{ 22 {"day", days}, 23 {"hour", hours}, 24 {"min", minutes}, 25 {"sec", seconds}, 26 } 27 28 var parts []string 29 for _, chunk := range chunks { 30 switch chunk.amount { 31 case 0: 32 continue 33 case 1: 34 parts = append(parts, fmt.Sprintf("%d %s", chunk.amount, chunk.singularName)) 35 default: 36 parts = append(parts, fmt.Sprintf("%d %ss", chunk.amount, chunk.singularName)) 37 } 38 } 39 return strings.Join(parts, " ") 40 }