diff --git a/go.mod b/go.mod
index 2e0c2307a94c8041f04a99a09ef55e55365149d8..2dfd5650873ca11c24564b7179bd1d92af79e080 100644
--- a/go.mod
+++ b/go.mod
@@ -16,6 +16,7 @@ require (
 	github.com/go-resty/resty/v2 v2.7.0
 	github.com/golang-jwt/jwt/v4 v4.4.3
 	github.com/google/uuid v1.3.0
+	github.com/jinzhu/now v1.1.5
 	github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826
 	github.com/opensearch-project/opensearch-go/v2 v2.2.0
 	github.com/pkg/errors v0.9.1
diff --git a/go.sum b/go.sum
index 74d33d73a0c7cd112daebf6b2b218b5a37e4d9f0..ca0e1ce52ae54924c9dfd148329eba8e77e0a75d 100644
--- a/go.sum
+++ b/go.sum
@@ -103,6 +103,8 @@ github.com/inconshreveable/log15/v3 v3.0.0-testing.5 h1:h4e0f3kjgg+RJBlKOabrohjH
 github.com/inconshreveable/log15/v3 v3.0.0-testing.5/go.mod h1:3GQg1SVrLoWGfRv/kAZMsdyU5cp8eFc1P3cw+Wwku94=
 github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
 github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
+github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
+github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
 github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
 github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
 github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
diff --git a/string_utils/string_utils.go b/string_utils/string_utils.go
index 3c60ef531a1872e04be191541750d432a600e023..29c6cbba6e19c4d1bffbb1797eeb6779f87ef70f 100644
--- a/string_utils/string_utils.go
+++ b/string_utils/string_utils.go
@@ -352,3 +352,20 @@ func TrimSpaceForPointer(s *string) *string {
 func TrimAndToLower(s string) string {
 	return strings.ToLower(strings.TrimSpace(s))
 }
+
+func StringContainsNumbers(s string) bool {
+	// Define a regular expression to match numbers
+	regex := regexp.MustCompile("[0-9]")
+
+	// Use FindString to check if the string contains any numbers
+	return regex.MatchString(s)
+}
+
+func StringContainsOnlyNumbers(s string) bool {
+	for _, char := range s {
+		if !unicode.IsDigit(char) {
+			return false
+		}
+	}
+	return true
+}
diff --git a/utils/utils.go b/utils/utils.go
index 0174c566bf6670bbe737b3b6bdd90519d70a6f8c..1a70f16a59889d4640ae60365d85e34f599c337b 100644
--- a/utils/utils.go
+++ b/utils/utils.go
@@ -3,14 +3,17 @@ package utils
 import (
 	"bytes"
 	emailverifier "github.com/AfterShip/email-verifier"
+	"github.com/jinzhu/now"
 	"github.com/mohae/deepcopy"
 	"gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/errors"
 	"gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/string_utils"
+	"math"
 	"net/url"
 	"os"
 	"reflect"
 	"regexp"
 	"strings"
+	"time"
 )
 
 // GetEnv is a helper function for getting environment variables with a default
@@ -249,3 +252,9 @@ func IsEqual(expected interface{}, actual interface{}) bool {
 	return reflect.DeepEqual(expected, actual)
 
 }
+
+func DetermineDaysLeft(fromDateLocal time.Time, toDateLocal time.Time) int {
+	fromDate := now.With(fromDateLocal).EndOfDay()
+	toDate := now.With(toDateLocal).EndOfDay()
+	return int(math.Floor(toDate.Sub(fromDate).Hours() / 24))
+}