Select Git revision
date_utils.go
date_utils.go 3.75 KiB
package date_utils
import (
"github.com/araddon/dateparse"
"strconv"
"time"
)
const TimeZoneString = "Africa/Johannesburg"
var currentLocation *time.Location
func DateLayoutYearMonthDayTimeT() string {
layout := "2006-01-02T15:04:05"
return layout
}
func DateLayoutYearMonthDayTimeTZ() string {
layout := "2006-01-02T15:04:05Z"
return layout
}
func DateLayoutYearMonthDayTimeMillisecondTZ() string {
layout := "2006-01-02T15:04:05.000Z"
return layout
}
func DateLayoutDB() string {
return "2006-01-02 15:04:05.000000-07"
}
func DateLayoutYearMonthDayTimeTimezone() string {
layout := "2006-01-02 15:04:05-07:00"
return layout
}
func DateLayoutForDB() string {
layout := "2006-01-02 15:04:05-07"
return layout
}
func DateLayoutYearMonthDayTime() string {
layout := "2006-01-02 15:04:05"
return layout
}
func DateLayoutFilenameSafe() string {
layout := "2006-01-02(15h04s05)"
return layout
}
func DateLayoutYearMonthDay() string {
layout := "2006-01-02"
return layout
}
func DateLayoutTime() string {
layout := "15:04:05"
return layout
}
func DateLayoutHumanReadable() string {
layout := "02 Jan 2006"
return layout
}
func DateLayoutHumanReadableWithTime() string {
layout := "02 Jan 2006 15:04"
return layout
}
func DateLayoutTrimmed() string {
layout := "20060102150405"
return layout
}
func DateDBFormattedString(date time.Time) string {
return date.Format(DateLayoutDB())
}
func DateDBFormattedStringDateOnly(date time.Time) string {
return date.Format(DateLayoutYearMonthDay())
}
func CurrentLocation() *time.Location {
if currentLocation == nil {
currentLocation, _ = time.LoadLocation(TimeZoneString)
}
return currentLocation
}
func DateLocal(date *time.Time) {
if date == nil {
return
}
*date = (*date).In(CurrentLocation())
}
func CurrentDate() time.Time {
currentDate := time.Now().In(CurrentLocation())
return currentDate
}
func DateEqual(date1, date2 time.Time) bool {
y1, m1, d1 := date1.Date()
y2, m2, d2 := date2.Date()
return y1 == y2 && m1 == m2 && d1 == d2
}
// TimeBefore determines whether a (string format HH:mm) is earlier than b (string format HH:mm)
func TimeBefore(a string, b string) bool {
if len(a) < 5 || len(b) < 5 {
return false // can't detemrine before/after
}
hoursA, _ := strconv.Atoi(a[0:2])
hoursB, _ := strconv.Atoi(b[0:2])
minA, _ := strconv.Atoi(a[3:5])
minB, _ := strconv.Atoi(b[3:5])
if hoursA == hoursB {
return minA < minB
}
return hoursA < hoursB
}
// ConvertToNoDateTimeString - Converts a PSQL Time type to Go Time type
func ConvertToNoDateTimeString(timeString *string) (*string, error) {
parsedTime, err := time.Parse("15:04:05", *timeString)
if err != nil {
return nil, err
}
formattedTime := parsedTime.Format("15:04")
return &formattedTime, nil
}
// ParseTimeString attempts to parse the string as the default date-time format, or as a date only format
func ParseTimeString(timeString string) (time.Time, error) {
// Try using the defined formats in date_utils
parsedTime, err := time.Parse(DateLayoutYearMonthDayTimeMillisecondTZ(), timeString)
if err != nil {
parsedTime, err = time.Parse(DateLayoutYearMonthDayTimeT(), timeString)
if err != nil {
parsedTime, err = time.Parse(DateLayoutYearMonthDayTimeTZ(), timeString)
if err != nil {
parsedTime, err = time.Parse(DateLayoutYearMonthDay(), timeString)
if err != nil {
parsedTime, err = time.Parse(DateLayoutYearMonthDayTime(), timeString)
if err != nil {
parsedTime, err = time.Parse(DateLayoutYearMonthDayTimeTimezone(), timeString)
if err != nil {
parsedTime, err = time.Parse(DateLayoutDB(), timeString)
}
}
}
}
}
}
if err != nil {
// Try using other date formats from dateparse library
parsedTime, err = dateparse.ParseAny(timeString)
}
return parsedTime, err
}