From 05f0016b7ed453f451155b596c32603d6b648313 Mon Sep 17 00:00:00 2001 From: kercylan98 Date: Sat, 23 Sep 2023 11:25:46 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20timer=20=E5=8C=85=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E9=83=A8=E5=88=86=E8=8E=B7=E5=8F=96=20=E5=88=86=E3=80=81?= =?UTF-8?q?=E6=97=A5=E3=80=81=E6=9C=88=E3=80=81=E5=B9=B4=20=E5=BC=80?= =?UTF-8?q?=E5=A7=8B=E7=BB=93=E6=9D=9F=E6=97=B6=E9=97=B4=E5=87=BD=E6=95=B0?= =?UTF-8?q?=EF=BC=8C=E4=BB=A5=E5=8F=8A=E5=BF=AB=E6=8D=B7=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E7=AA=97=E5=8F=A3=E6=97=B6=E9=97=B4=E6=AE=B5?= =?UTF-8?q?=E7=9A=84=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/times/helper.go | 40 ++++++++++++++++++++++++++++++++++++++ utils/times/period.go | 19 ++++++++++++++++++ utils/times/period_test.go | 15 ++++++++++++++ 3 files changed, 74 insertions(+) create mode 100644 utils/times/period_test.go diff --git a/utils/times/helper.go b/utils/times/helper.go index 4a49705..743fcd0 100644 --- a/utils/times/helper.go +++ b/utils/times/helper.go @@ -131,3 +131,43 @@ func GetDayLast(t time.Time) time.Time { func GetYesterdayLast(t time.Time) time.Time { return GetDayLast(GetYesterday(t)) } + +// GetMinuteStart 获取一个时间的 0 秒 +func GetMinuteStart(t time.Time) time.Time { + return time.Date(t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute(), 0, 0, time.Local) +} + +// GetMinuteEnd 获取一个时间的 59 秒 +func GetMinuteEnd(t time.Time) time.Time { + return GetMinuteStart(t).Add(time.Minute - time.Nanosecond) +} + +// GetHourStart 获取一个时间的 0 分 0 秒 +func GetHourStart(t time.Time) time.Time { + return time.Date(t.Year(), t.Month(), t.Day(), t.Hour(), 0, 0, 0, time.Local) +} + +// GetHourEnd 获取一个时间的 59 分 59 秒 +func GetHourEnd(t time.Time) time.Time { + return GetHourStart(t).Add(time.Hour - time.Nanosecond) +} + +// GetMonthStart 获取一个时间的月初 +func GetMonthStart(t time.Time) time.Time { + return time.Date(t.Year(), t.Month(), 1, 0, 0, 0, 0, time.Local) +} + +// GetMonthEnd 获取一个时间的月末 +func GetMonthEnd(t time.Time) time.Time { + return GetMonthStart(t).AddDate(0, 1, -1) +} + +// GetYearStart 获取一个时间的年初 +func GetYearStart(t time.Time) time.Time { + return time.Date(t.Year(), 1, 1, 0, 0, 0, 0, time.Local) +} + +// GetYearEnd 获取一个时间的年末 +func GetYearEnd(t time.Time) time.Time { + return GetYearStart(t).AddDate(1, 0, -1) +} diff --git a/utils/times/period.go b/utils/times/period.go index f12fd95..48ba21c 100644 --- a/utils/times/period.go +++ b/utils/times/period.go @@ -11,6 +11,25 @@ func NewPeriod(start, end time.Time) Period { return Period{start, end} } +// NewPeriodWindow 创建一个特定长度的时间窗口 +func NewPeriodWindow(t time.Time, size time.Duration) Period { + var start time.Time + if size < time.Minute { + start = t + } else { + start = t.Truncate(time.Minute) + } + end := start.Add(size) + return Period{start, end} +} + +// NewPeriodWindowWeek 创建一周长度的时间窗口,从周一零点开始至周日 23:59:59 结束 +func NewPeriodWindowWeek(t time.Time) Period { + var start = GetMondayZero(t) + end := start.Add(Week) + return Period{start, end} +} + // NewPeriodWithTimeArray 创建一个时间段 func NewPeriodWithTimeArray(times [2]time.Time) Period { return NewPeriod(times[0], times[1]) diff --git a/utils/times/period_test.go b/utils/times/period_test.go new file mode 100644 index 0000000..b398f2f --- /dev/null +++ b/utils/times/period_test.go @@ -0,0 +1,15 @@ +package times_test + +import ( + "fmt" + "github.com/kercylan98/minotaur/utils/times" + "testing" + "time" +) + +func TestNewPeriodWindow(t *testing.T) { + cur := time.Now() + fmt.Println(cur) + window := times.NewPeriodWindow(cur, times.Day) + fmt.Println(window) +}