diff options
Diffstat (limited to 'modules')
-rw-r--r-- | modules/templates/helper.go | 4 | ||||
-rw-r--r-- | modules/util/sec_to_time.go | 44 | ||||
-rw-r--r-- | modules/util/sec_to_time_test.go | 20 |
3 files changed, 66 insertions, 2 deletions
diff --git a/modules/templates/helper.go b/modules/templates/helper.go index 255866e2ed..63c165bc8b 100644 --- a/modules/templates/helper.go +++ b/modules/templates/helper.go @@ -256,7 +256,7 @@ func NewFuncMap() []template.FuncMap { }, "Printf": fmt.Sprintf, "Escape": Escape, - "Sec2Time": models.SecToTime, + "Sec2Time": util.SecToTime, "ParseDeadline": func(deadline string) []string { return strings.Split(deadline, "|") }, @@ -447,7 +447,7 @@ func NewTextFuncMap() []texttmpl.FuncMap { }, "Printf": fmt.Sprintf, "Escape": Escape, - "Sec2Time": models.SecToTime, + "Sec2Time": util.SecToTime, "ParseDeadline": func(deadline string) []string { return strings.Split(deadline, "|") }, diff --git a/modules/util/sec_to_time.go b/modules/util/sec_to_time.go new file mode 100644 index 0000000000..657b30cddf --- /dev/null +++ b/modules/util/sec_to_time.go @@ -0,0 +1,44 @@ +// Copyright 2022 Gitea. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package util + +import "fmt" + +// SecToTime converts an amount of seconds to a human-readable string (example: 66s -> 1min 6s) +func SecToTime(duration int64) string { + seconds := duration % 60 + minutes := (duration / (60)) % 60 + hours := duration / (60 * 60) % 24 + days := duration / (60 * 60) / 24 + + var formattedTime string + + if days > 0 { + formattedTime = fmt.Sprintf("%dd", days) + } + if hours > 0 { + if formattedTime == "" { + formattedTime = fmt.Sprintf("%dh", hours) + } else { + formattedTime = fmt.Sprintf("%s %dh", formattedTime, hours) + } + } + if minutes > 0 { + if formattedTime == "" { + formattedTime = fmt.Sprintf("%dm", minutes) + } else { + formattedTime = fmt.Sprintf("%s %dm", formattedTime, minutes) + } + } + if seconds > 0 { + if formattedTime == "" { + formattedTime = fmt.Sprintf("%ds", seconds) + } else { + formattedTime = fmt.Sprintf("%s %ds", formattedTime, seconds) + } + } + + return formattedTime +} diff --git a/modules/util/sec_to_time_test.go b/modules/util/sec_to_time_test.go new file mode 100644 index 0000000000..915dcbf727 --- /dev/null +++ b/modules/util/sec_to_time_test.go @@ -0,0 +1,20 @@ +// Copyright 2022 Gitea. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package util + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestSecToTime(t *testing.T) { + assert.Equal(t, SecToTime(10), "10s") + assert.Equal(t, SecToTime(100), "1m 40s") + assert.Equal(t, SecToTime(1000), "16m 40s") + assert.Equal(t, SecToTime(10000), "2h 46m 40s") + assert.Equal(t, SecToTime(100000), "1d 3h 46m 40s") + assert.Equal(t, SecToTime(1000000), "11d 13h 46m 40s") +} |