Files
x_admin/server/util/null_time.go
2024-08-16 12:33:23 +08:00

119 lines
2.0 KiB
Go

package util
import (
"time"
"x_admin/core"
)
var NullTimeUtil = nullTimeUtil{
DateFormat: "2006-01-02",
TimeFormat: "2006-01-02 15:04:05",
}
// arrayUtil 数组工具类
type nullTimeUtil struct {
DateFormat string
TimeFormat string
}
// DecodeTime 时间解码
func (t nullTimeUtil) DecodeTime(value any) (any, error) {
tt, e := t.Parse(value)
return tt, e
}
// EncodeTime 时间编码
func (t nullTimeUtil) EncodeTime(value any) any {
var str = ""
switch v := value.(type) {
case map[string]interface{}:
val := v["Time"]
switch tt := val.(type) {
case *string:
ttt, _ := t.Parse(*tt)
str = ttt.String()
case *time.Time:
if tt != nil {
ttt, _ := t.Parse(*tt)
str = ttt.String()
} else {
str = ""
}
}
}
return str
}
// ToUnix 时间戳转时间戳
func (t nullTimeUtil) ToUnix(date any) int64 {
switch v := date.(type) {
case string:
if v == "" {
return 0
}
tt, e := time.Parse(t.TimeFormat, v)
if e != nil {
return 0
}
return time.Time(tt).Unix()
case time.Time:
return v.Unix()
default:
return 0
}
}
// Parse 时间戳转时间
func (t nullTimeUtil) Parse(value interface{}) (core.NullTime, error) {
switch v := value.(type) {
case string:
tt, e := t.ParseString(v)
return tt, e
case time.Time:
tt := t.ParseTime(v)
return tt, nil
case core.NullTime:
return v, nil
default:
return t.Null(), nil
}
}
// ParseTime 时间转时间戳
func (t nullTimeUtil) ParseTime(date time.Time) core.NullTime {
return core.NullTime{
Time: &date,
Valid: true,
}
}
// ParseString 时间字符串转时间戳
func (t nullTimeUtil) ParseString(date string) (core.NullTime, error) {
tt, e := time.Parse(t.TimeFormat, date)
if e != nil {
return t.Null(), e
}
return core.NullTime{
Time: &tt,
Valid: true,
}, nil
}
// NowTime 当前时间
func (t nullTimeUtil) Null() core.NullTime {
return core.NullTime{
Time: nil,
Valid: true,
}
}
// NowTime 当前时间
func (t nullTimeUtil) Now() core.NullTime {
now := time.Now()
return core.NullTime{
Time: &now,
Valid: true,
}
}