From eeadb1fecb87166d2905521fcec371bfa7311acb Mon Sep 17 00:00:00 2001 From: dudaodong Date: Tue, 15 Feb 2022 16:07:59 +0800 Subject: [PATCH] feat: add funcs for get begin and end time for year, month, week, day, hour, minute --- datetime/datetime.go | 70 ++++++++++++++++++++ datetime/datetime_test.go | 130 +++++++++++++++++++++++++++++++++++--- 2 files changed, 190 insertions(+), 10 deletions(-) diff --git a/datetime/datetime.go b/datetime/datetime.go index 547f6a3..cf35bf8 100644 --- a/datetime/datetime.go +++ b/datetime/datetime.go @@ -110,3 +110,73 @@ func FormatStrToTime(str, format string) (time.Time, error) { return time.Parse(v, str) } + +// BeginOfMinute return beginning minute time of day +func BeginOfMinute(t time.Time) time.Time { + y, m, d := t.Date() + return time.Date(y, m, d, t.Hour(), t.Minute(), 0, 0, t.Location()) +} + +// EndOfMinute return end minute time of day +func EndOfMinute(t time.Time) time.Time { + y, m, d := t.Date() + return time.Date(y, m, d, t.Hour(), t.Minute(), 59, int(time.Second-time.Nanosecond), t.Location()) +} + +// BeginOfHour return beginning hour time of day +func BeginOfHour(t time.Time) time.Time { + y, m, d := t.Date() + return time.Date(y, m, d, t.Hour(), 0, 0, 0, t.Location()) +} + +// EndOfHour return end hour time of day +func EndOfHour(t time.Time) time.Time { + y, m, d := t.Date() + return time.Date(y, m, d, t.Hour(), 59, 59, int(time.Second-time.Nanosecond), t.Location()) +} + +// BeginOfDay return beginning hour time of day +func BeginOfDay(t time.Time) time.Time { + y, m, d := t.Date() + return time.Date(y, m, d, 0, 0, 0, 0, t.Location()) +} + +// EndOfDay return end time of day +func EndOfDay(t time.Time) time.Time { + y, m, d := t.Date() + return time.Date(y, m, d, 23, 59, 59, int(time.Second-time.Nanosecond), t.Location()) +} + +// BeginOfWeek return beginning week, week begin from Sunday +func BeginOfWeek(t time.Time) time.Time { + y, m, d := t.AddDate(0, 0, 0-int(BeginOfDay(t).Weekday())).Date() + return time.Date(y, m, d, 0, 0, 0, 0, t.Location()) +} + +// EndOfWeek return end week time, week end with Saturday +func EndOfWeek(t time.Time) time.Time { + y, m, d := BeginOfWeek(t).AddDate(0, 0, 7).Add(-time.Nanosecond).Date() + return time.Date(y, m, d, 23, 59, 59, int(time.Second-time.Nanosecond), t.Location()) +} + +// BeginOfMonth return beginning of month +func BeginOfMonth(t time.Time) time.Time { + y, m, _ := t.Date() + return time.Date(y, m, 1, 0, 0, 0, 0, t.Location()) +} + +// EndOfMonth return end of month +func EndOfMonth(t time.Time) time.Time { + return BeginOfMonth(t).AddDate(0, 1, 0).Add(-time.Nanosecond) +} + +// BeginOfYear return beginning of year +func BeginOfYear(t time.Time) time.Time { + y, _, _ := t.Date() + return time.Date(y, time.January, 1, 0, 0, 0, 0, t.Location()) +} + +// EndOfYear return end of year +func EndOfYear(t time.Time) time.Time { + return BeginOfYear(t).AddDate(1, 0, 0).Add(-time.Nanosecond) +} diff --git a/datetime/datetime_test.go b/datetime/datetime_test.go index ae92442..728fe97 100644 --- a/datetime/datetime_test.go +++ b/datetime/datetime_test.go @@ -64,16 +64,6 @@ func TestGetNowDateTime(t *testing.T) { assert.Equal(expected, GetNowDateTime()) } -//todo -//func TestGetZeroHourTimestamp(t *testing.T) { -// ts := GetZeroHourTimestamp() -// expected := time.Now().UTC().Unix() - 8*3600 -// if ts != expected { -// utils.LogFailedTestInfo(t, "GetZeroHourTimestamp", "", expected, ts) -// t.FailNow() -// } -//} - func TestFormatTimeToStr(t *testing.T) { assert := internal.NewAssert(t, "TestFormatTimeToStr") @@ -121,3 +111,123 @@ func TestFormatStrToTime(t *testing.T) { assert.Equal(expected, actual) } } + +func TestBeginOfMinute(t *testing.T) { + assert := internal.NewAssert(t, "TestBeginOfMinute") + + expected := time.Date(2022, 2, 15, 15, 48, 0, 0, time.Local) + td := time.Date(2022, 2, 15, 15, 48, 40, 112, time.Local) + actual := BeginOfMinute(td) + + assert.Equal(expected, actual) +} + +func TestEndOfMinute(t *testing.T) { + assert := internal.NewAssert(t, "TestEndOfMinute") + + expected := time.Date(2022, 2, 15, 15, 48, 59, 999999999, time.Local) + td := time.Date(2022, 2, 15, 15, 48, 40, 112, time.Local) + actual := EndOfMinute(td) + + assert.Equal(expected, actual) +} + +func TestBeginOfHour(t *testing.T) { + assert := internal.NewAssert(t, "TestBeginOfHour") + + expected := time.Date(2022, 2, 15, 15, 0, 0, 0, time.Local) + td := time.Date(2022, 2, 15, 15, 48, 40, 112, time.Local) + actual := BeginOfHour(td) + + assert.Equal(expected, actual) +} + +func TestEndOfHour(t *testing.T) { + assert := internal.NewAssert(t, "TestEndOfHour") + + expected := time.Date(2022, 2, 15, 15, 59, 59, 999999999, time.Local) + td := time.Date(2022, 2, 15, 15, 48, 40, 112, time.Local) + actual := EndOfHour(td) + + assert.Equal(expected, actual) +} + +func TestBeginOfDay(t *testing.T) { + assert := internal.NewAssert(t, "TestBeginOfDay") + + expected := time.Date(2022, 2, 15, 0, 0, 0, 0, time.Local) + td := time.Date(2022, 2, 15, 15, 48, 40, 112, time.Local) + actual := BeginOfDay(td) + + assert.Equal(expected, actual) +} + +func TestEndOfDay(t *testing.T) { + assert := internal.NewAssert(t, "TestEndOfDay") + + expected := time.Date(2022, 2, 15, 23, 59, 59, 999999999, time.Local) + td := time.Date(2022, 2, 15, 15, 48, 40, 112, time.Local) + actual := EndOfDay(td) + + assert.Equal(expected, actual) +} + +func TestBeginOfWeek(t *testing.T) { + assert := internal.NewAssert(t, "TestBeginOfWeek") + + expected := time.Date(2022, 2, 13, 0, 0, 0, 0, time.Local) + td := time.Date(2022, 2, 15, 15, 48, 40, 112, time.Local) + actual := BeginOfWeek(td) + + assert.Equal(expected, actual) +} + +func TestEndOfWeek(t *testing.T) { + assert := internal.NewAssert(t, "TestEndOfWeek") + + expected := time.Date(2022, 2, 19, 23, 59, 59, 999999999, time.Local) + td := time.Date(2022, 2, 15, 15, 48, 40, 112, time.Local) + actual := EndOfWeek(td) + + assert.Equal(expected, actual) +} + +func TestBeginOfMonth(t *testing.T) { + assert := internal.NewAssert(t, "TestBeginOfMonth") + + expected := time.Date(2022, 2, 1, 0, 0, 0, 0, time.Local) + td := time.Date(2022, 2, 15, 15, 48, 40, 112, time.Local) + actual := BeginOfMonth(td) + + assert.Equal(expected, actual) +} + +func TestEndOfMonth(t *testing.T) { + assert := internal.NewAssert(t, "TestEndOfMonth") + + expected := time.Date(2022, 2, 28, 23, 59, 59, 999999999, time.Local) + td := time.Date(2022, 2, 15, 15, 48, 40, 112, time.Local) + actual := EndOfMonth(td) + + assert.Equal(expected, actual) +} + +func TestBeginOfYear(t *testing.T) { + assert := internal.NewAssert(t, "TestBeginOfYear") + + expected := time.Date(2022, 1, 1, 0, 0, 0, 0, time.Local) + td := time.Date(2022, 2, 15, 15, 48, 40, 112, time.Local) + actual := BeginOfYear(td) + + assert.Equal(expected, actual) +} + +func TestEndOfYear(t *testing.T) { + assert := internal.NewAssert(t, "TestEndOfYear") + + expected := time.Date(2022, 12, 31, 23, 59, 59, 999999999, time.Local) + td := time.Date(2022, 2, 15, 15, 48, 40, 112, time.Local) + actual := EndOfYear(td) + + assert.Equal(expected, actual) +}