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  }