From 059c82fd471802a7c2876ff53f3a590b3e1bd2a1 Mon Sep 17 00:00:00 2001 From: Radu Ioan Fericean Date: Wed, 17 Feb 2016 14:19:38 +0200 Subject: [PATCH] added last day of month function --- utils/coreutils.go | 15 +++++++++++++++ utils/utils_test.go | 28 ++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/utils/coreutils.go b/utils/coreutils.go index 4f857b07d..b89804af0 100644 --- a/utils/coreutils.go +++ b/utils/coreutils.go @@ -518,3 +518,18 @@ func CastIfToString(iface interface{}) (strVal string, casts bool) { } return strVal, casts } + +func GetEndOfMonth(ref time.Time) time.Time { + if ref.IsZero() { + return time.Now() + } + year, month, _ := ref.Date() + if month == time.December { + year++ + month = time.January + } else { + month++ + } + eom := time.Date(year, month, 1, 0, 0, 0, 0, ref.Location()) + return eom.Add(-time.Second) +} diff --git a/utils/utils_test.go b/utils/utils_test.go index 6c66c8a0d..adca2dfad 100644 --- a/utils/utils_test.go +++ b/utils/utils_test.go @@ -600,3 +600,31 @@ func TestCastIfToString(t *testing.T) { t.Errorf("Received: %+v", sOut) } } + +func TestEndOfMonth(t *testing.T) { + eom := GetEndOfMonth(time.Date(2016, time.February, 5, 10, 1, 2, 3, time.UTC)) + expected := time.Date(2016, time.February, 29, 23, 59, 59, 0, time.UTC) + if !eom.Equal(expected) { + t.Errorf("Expected %v was %v", expected, eom) + } + eom = GetEndOfMonth(time.Date(2015, time.February, 5, 10, 1, 2, 3, time.UTC)) + expected = time.Date(2015, time.February, 28, 23, 59, 59, 0, time.UTC) + if !eom.Equal(expected) { + t.Errorf("Expected %v was %v", expected, eom) + } + eom = GetEndOfMonth(time.Date(2016, time.January, 31, 10, 1, 2, 3, time.UTC)) + expected = time.Date(2016, time.January, 31, 23, 59, 59, 0, time.UTC) + if !eom.Equal(expected) { + t.Errorf("Expected %v was %v", expected, eom) + } + eom = GetEndOfMonth(time.Date(2016, time.December, 31, 10, 1, 2, 3, time.UTC)) + expected = time.Date(2016, time.December, 31, 23, 59, 59, 0, time.UTC) + if !eom.Equal(expected) { + t.Errorf("Expected %v was %v", expected, eom) + } + eom = GetEndOfMonth(time.Date(2016, time.July, 31, 23, 59, 59, 0, time.UTC)) + expected = time.Date(2016, time.July, 31, 23, 59, 59, 0, time.UTC) + if !eom.Equal(expected) { + t.Errorf("Expected %v was %v", expected, eom) + } +}