fix convert/seconds.go, add test to round
This commit is contained in:
parent
80a69536a9
commit
c87a921cb5
|
@ -1,6 +1,11 @@
|
||||||
package common
|
package common
|
||||||
|
|
||||||
// TODO:
|
import (
|
||||||
func Uptime() {
|
"time"
|
||||||
|
|
||||||
|
"github.com/MedzikUser/go-utils/convert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Uptime(start time.Time) string {
|
||||||
|
return convert.Seconds(time.Since(start))
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
package convert
|
||||||
|
|
||||||
|
import "testing"
|
||||||
|
|
||||||
|
func TestRound1(t *testing.T) {
|
||||||
|
r := Round(0.1)
|
||||||
|
if r != 0 {
|
||||||
|
t.Fatal(r)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRound2(t *testing.T) {
|
||||||
|
r := Round(0.9)
|
||||||
|
if r != 0 {
|
||||||
|
t.Fatal(r)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRound3(t *testing.T) {
|
||||||
|
r := Round(25.2)
|
||||||
|
if r != 25 {
|
||||||
|
t.Fatal(r)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRound4(t *testing.T) {
|
||||||
|
r := Round(46.9998655)
|
||||||
|
if r != 46 {
|
||||||
|
t.Fatal(r)
|
||||||
|
}
|
||||||
|
}
|
|
@ -11,73 +11,49 @@ func Seconds(s time.Duration) string {
|
||||||
minutes := Round(s.Minutes())
|
minutes := Round(s.Minutes())
|
||||||
seconds := Round(s.Seconds())
|
seconds := Round(s.Seconds())
|
||||||
|
|
||||||
hours, days := HoursToDays(hours)
|
var (
|
||||||
days, months := DaysToMonths(days)
|
days int
|
||||||
months, years := MonthsToYears(months)
|
format string
|
||||||
|
)
|
||||||
var format string
|
|
||||||
|
|
||||||
if years > 0 {
|
|
||||||
format += strconv.Itoa(years) + " years "
|
|
||||||
months -= years * 12
|
|
||||||
}
|
|
||||||
|
|
||||||
if months > 0 {
|
|
||||||
format += strconv.Itoa(months) + " months "
|
|
||||||
days -= months * 30
|
|
||||||
}
|
|
||||||
|
|
||||||
if days > 0 {
|
|
||||||
format += strconv.Itoa(days) + " days "
|
|
||||||
hours -= days * 24
|
|
||||||
}
|
|
||||||
|
|
||||||
if hours > 0 {
|
|
||||||
format += strconv.Itoa(hours) + " hours "
|
|
||||||
minutes -= hours * 24
|
|
||||||
}
|
|
||||||
|
|
||||||
if minutes > 0 {
|
|
||||||
format += strconv.Itoa(minutes) + " minutes "
|
|
||||||
seconds -= minutes * 60
|
|
||||||
}
|
|
||||||
|
|
||||||
if seconds > 0 {
|
|
||||||
format += strconv.Itoa(seconds) + " seconds"
|
|
||||||
}
|
|
||||||
|
|
||||||
return format
|
|
||||||
}
|
|
||||||
|
|
||||||
func HoursToDays(hours int) (int, int) {
|
|
||||||
var days int
|
|
||||||
|
|
||||||
for hours/24 > 0 {
|
for hours/24 > 0 {
|
||||||
days++
|
days++
|
||||||
hours -= 24
|
hours -= 24
|
||||||
}
|
}
|
||||||
|
|
||||||
return hours, days
|
if days > 0 {
|
||||||
}
|
format += strconv.Itoa(days) + "d"
|
||||||
|
|
||||||
func DaysToMonths(days int) (int, int) {
|
|
||||||
var months int
|
|
||||||
|
|
||||||
for days/30 > 0 {
|
|
||||||
months++
|
|
||||||
days -= 30
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return days, months
|
if hours > 0 {
|
||||||
}
|
if len(format) >= 1 {
|
||||||
|
format += " "
|
||||||
|
}
|
||||||
|
|
||||||
func MonthsToYears(months int) (int, int) {
|
format += strconv.Itoa(hours) + "h"
|
||||||
var years int
|
} else if days > 0 {
|
||||||
|
hours = days * 24
|
||||||
for months/12 > 0 {
|
|
||||||
years++
|
|
||||||
months -= 12
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return months, years
|
minutes -= Round(s.Hours()) * 60
|
||||||
|
|
||||||
|
if minutes > 0 {
|
||||||
|
if len(format) >= 1 {
|
||||||
|
format += " "
|
||||||
|
}
|
||||||
|
|
||||||
|
format += strconv.Itoa(minutes) + "m"
|
||||||
|
}
|
||||||
|
|
||||||
|
seconds -= Round(s.Minutes()) * 60
|
||||||
|
|
||||||
|
if seconds > 0 {
|
||||||
|
if len(format) >= 1 {
|
||||||
|
format += " "
|
||||||
|
}
|
||||||
|
|
||||||
|
format += strconv.Itoa(seconds) + "s"
|
||||||
|
}
|
||||||
|
|
||||||
|
return format
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,9 +5,35 @@ import (
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestSeconds(t *testing.T) {
|
func TestSeconds1(t *testing.T) {
|
||||||
d, err := time.ParseDuration("48h")
|
d, err := time.ParseDuration("48h1m2s")
|
||||||
t.Error("1", err)
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
out := Seconds(d)
|
out := Seconds(d)
|
||||||
t.Error("2", out)
|
if out != "2d 1m 2s" {
|
||||||
|
t.Fatal(out)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSeconds2(t *testing.T) {
|
||||||
|
d, err := time.ParseDuration("48h5h1m2s")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
out := Seconds(d)
|
||||||
|
if out != "2d 5h 1m 2s" {
|
||||||
|
t.Fatal(out)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSeconds3(t *testing.T) {
|
||||||
|
d, err := time.ParseDuration("48h5h60s")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
out := Seconds(d)
|
||||||
|
if out != "2d 5h 1m" {
|
||||||
|
t.Fatal(out)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue