2020-09-13 19:27:47 +08:00
|
|
|
package shared
|
|
|
|
|
|
2020-12-18 21:19:25 +08:00
|
|
|
import (
|
|
|
|
|
"encoding/json"
|
2023-05-17 18:42:35 +08:00
|
|
|
"github.com/iwind/TeaGo/types"
|
2020-12-18 21:19:25 +08:00
|
|
|
"time"
|
|
|
|
|
)
|
2020-09-13 19:27:47 +08:00
|
|
|
|
|
|
|
|
type TimeDurationUnit = string
|
|
|
|
|
|
|
|
|
|
const (
|
|
|
|
|
TimeDurationUnitMS TimeDurationUnit = "ms"
|
|
|
|
|
TimeDurationUnitSecond TimeDurationUnit = "second"
|
|
|
|
|
TimeDurationUnitMinute TimeDurationUnit = "minute"
|
|
|
|
|
TimeDurationUnitHour TimeDurationUnit = "hour"
|
|
|
|
|
TimeDurationUnitDay TimeDurationUnit = "day"
|
2021-12-08 17:40:27 +08:00
|
|
|
TimeDurationUnitWeek TimeDurationUnit = "week"
|
2020-09-13 19:27:47 +08:00
|
|
|
)
|
|
|
|
|
|
2021-12-08 17:40:27 +08:00
|
|
|
// TimeDuration 时间间隔
|
2020-09-13 19:27:47 +08:00
|
|
|
type TimeDuration struct {
|
|
|
|
|
Count int64 `yaml:"count" json:"count"` // 数量
|
|
|
|
|
Unit TimeDurationUnit `yaml:"unit" json:"unit"` // 单位
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (this *TimeDuration) Duration() time.Duration {
|
|
|
|
|
switch this.Unit {
|
|
|
|
|
case TimeDurationUnitMS:
|
|
|
|
|
return time.Duration(this.Count) * time.Millisecond
|
|
|
|
|
case TimeDurationUnitSecond:
|
|
|
|
|
return time.Duration(this.Count) * time.Second
|
|
|
|
|
case TimeDurationUnitMinute:
|
|
|
|
|
return time.Duration(this.Count) * time.Minute
|
|
|
|
|
case TimeDurationUnitHour:
|
|
|
|
|
return time.Duration(this.Count) * time.Hour
|
|
|
|
|
case TimeDurationUnitDay:
|
|
|
|
|
return time.Duration(this.Count) * 24 * time.Hour
|
2021-12-08 17:40:27 +08:00
|
|
|
case TimeDurationUnitWeek:
|
|
|
|
|
return time.Duration(this.Count) * 24 * 7 * time.Hour
|
2020-09-13 19:27:47 +08:00
|
|
|
default:
|
|
|
|
|
return time.Duration(this.Count) * time.Second
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-12-18 21:19:25 +08:00
|
|
|
|
2023-05-17 18:42:35 +08:00
|
|
|
func (this *TimeDuration) Seconds() int64 {
|
|
|
|
|
switch this.Unit {
|
|
|
|
|
case TimeDurationUnitMS:
|
|
|
|
|
return this.Count / 1000
|
|
|
|
|
case TimeDurationUnitSecond:
|
|
|
|
|
return this.Count
|
|
|
|
|
case TimeDurationUnitMinute:
|
|
|
|
|
return this.Count * 60
|
|
|
|
|
case TimeDurationUnitHour:
|
|
|
|
|
return this.Count * 3600
|
|
|
|
|
case TimeDurationUnitDay:
|
|
|
|
|
return this.Count * 3600 * 24
|
|
|
|
|
case TimeDurationUnitWeek:
|
|
|
|
|
return this.Count * 3600 * 24 * 7
|
|
|
|
|
default:
|
|
|
|
|
return this.Count
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (this *TimeDuration) Description() string {
|
|
|
|
|
var countString = types.String(this.Count)
|
|
|
|
|
switch this.Unit {
|
|
|
|
|
case TimeDurationUnitMS:
|
|
|
|
|
return countString + "毫秒"
|
|
|
|
|
case TimeDurationUnitSecond:
|
|
|
|
|
return countString + "秒"
|
|
|
|
|
case TimeDurationUnitMinute:
|
|
|
|
|
return countString + "分钟"
|
|
|
|
|
case TimeDurationUnitHour:
|
|
|
|
|
return countString + "小时"
|
|
|
|
|
case TimeDurationUnitDay:
|
|
|
|
|
return countString + "天"
|
|
|
|
|
case TimeDurationUnitWeek:
|
|
|
|
|
return countString + "周"
|
|
|
|
|
default:
|
|
|
|
|
return countString + "秒"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-12-18 21:19:25 +08:00
|
|
|
func (this *TimeDuration) AsJSON() ([]byte, error) {
|
|
|
|
|
return json.Marshal(this)
|
|
|
|
|
}
|