github.com/kyleu/dbaudit@v0.0.2-0.20240321155047-ff2f2c940496/app/util/time.go (about) 1 // Package util - Content managed by Project Forge, see [projectforge.md] for details. 2 package util 3 4 import ( 5 "time" 6 7 "github.com/araddon/dateparse" 8 "github.com/dustin/go-humanize" 9 "github.com/pkg/errors" 10 ) 11 12 func TimeTruncate(t *time.Time) *time.Time { 13 if t == nil { 14 return nil 15 } 16 ret := time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, t.Location()) 17 return &ret 18 } 19 20 func TimeCurrent() time.Time { 21 return time.Now() 22 } 23 24 func TimeCurrentP() *time.Time { 25 ret := TimeCurrent() 26 return &ret 27 } 28 29 func TimeToday() *time.Time { 30 return TimeTruncate(TimeCurrentP()) 31 } 32 33 func TimeCurrentUnix() int64 { 34 return TimeCurrent().Unix() 35 } 36 37 func TimeCurrentMillis() int64 { 38 return TimeCurrent().UnixMilli() 39 } 40 41 func TimeCurrentNanos() int64 { 42 return TimeCurrent().UnixNano() 43 } 44 45 func TimeRelative(t *time.Time) string { 46 if t == nil { 47 return "<never>" 48 } 49 return humanize.Time(*t) 50 } 51 52 func TimeToMap(t time.Time) map[string]any { 53 return map[string]any{"epoch": t.UnixMilli(), "iso8601": t.Format("2006-01-02T15:04:05-0700")} 54 } 55 56 func TimeToString(d *time.Time, fmt string) string { 57 if d == nil { 58 return "" 59 } 60 return d.Format(fmt) 61 } 62 63 func TimeFromString(s string) (*time.Time, error) { 64 if s == "" { 65 return nil, nil 66 } 67 ret, err := dateparse.ParseLocal(s) 68 if err != nil { 69 return nil, errors.New("invalid date string [" + s + "]") 70 } 71 return &ret, nil 72 } 73 74 func TimeFromStringSimple(s string) *time.Time { 75 ret, _ := TimeFromString(s) 76 return ret 77 } 78 79 func TimeFromStringFmt(s string, fmt string) (*time.Time, error) { 80 if s == "" { 81 return nil, nil 82 } 83 ret, err := time.Parse(fmt, s) 84 if err != nil { 85 return nil, errors.New("invalid date string [" + s + "], expected [" + fmt + "]") 86 } 87 return &ret, nil 88 }