From 19e5e81945d2e26c3db1fee0aaa583ae79b74e98 Mon Sep 17 00:00:00 2001 From: Stanly Date: Wed, 9 Mar 2022 22:06:58 +0800 Subject: [PATCH] Add timestamp millisecond --- types/timestamp.go | 46 ++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 38 insertions(+), 8 deletions(-) diff --git a/types/timestamp.go b/types/timestamp.go index bfcd250..302f41d 100644 --- a/types/timestamp.go +++ b/types/timestamp.go @@ -10,12 +10,12 @@ const ( FormatDatetime = "2006-01-02 15:04:05" ) -// Local 本地時區 -var Local = time.Local +// Location 本地時區 +var Location = time.Local // SetLocation 設定時區 func SetLocation(name string) { - Local, _ = time.LoadLocation(name) + Location, _ = time.LoadLocation(name) } // Timestamp 時間戳 @@ -26,9 +26,14 @@ func GetUnixNow() Timestamp { return Timestamp(time.Now().Unix()) } +// GetUnixMilliNow 取得現在時間戳記 +func GetUnixMilliNow() Timestamp { + return Timestamp(time.Now().UnixMilli()) +} + // GetUnix 嘗試取得時間戳記 func GetUnix(format, datetime string) (Timestamp, error) { - t, err := time.ParseInLocation(format, datetime, Local) + t, err := time.ParseInLocation(format, datetime, Location) return Timestamp(t.Unix()), err } @@ -48,6 +53,11 @@ func (t Timestamp) Time() time.Time { return time.Unix(t.Int64(), 0) } +// TimeMilli 轉為time類型 +func (t Timestamp) TimeMilli() time.Time { + return time.UnixMilli(t.Int64()) +} + // Date 回傳日期字串 func (t Timestamp) Date() string { if t == 0 { @@ -55,7 +65,7 @@ func (t Timestamp) Date() string { } return time. Unix(t.Int64(), 0). - In(Local). + In(Location). Format(FormatDate) } @@ -66,26 +76,46 @@ func (t Timestamp) Datetime() string { } return time. Unix(t.Int64(), 0). - In(Local). + In(Location). Format(FormatDatetime) } -// NowSub 與現在的時間差 -func (t Timestamp) NowSub() time.Duration { +// Since 與現在的時間差 +func (t Timestamp) Since() time.Duration { return time.Since(t.Time()) } +// SinceMilli 與現在的時間差 +func (t Timestamp) SinceMilli() time.Duration { + return time.Since(t.TimeMilli()) +} + // Sub 時間差 func (t Timestamp) Sub(t2 time.Time) time.Duration { return t2.Sub(t.Time()) } +// SubMilli 時間差 +func (t Timestamp) SubMilli(t2 time.Time) time.Duration { + return t2.Sub(t.TimeMilli()) +} + // After 是否在指定時間後 func (t Timestamp) After(t2 time.Time) bool { return t.Time().After(t2) } +// AfterMilli 是否在指定時間後 +func (t Timestamp) AfterMilli(t2 time.Time) bool { + return t.TimeMilli().After(t2) +} + // AfterNow 是否在目前時間後 func (t Timestamp) AfterNow() bool { return t.After(time.Now()) } + +// AfterMilliNow 是否在目前時間後 +func (t Timestamp) AfterMilliNow() bool { + return t.AfterMilli(time.Now()) +}