Newer
Older
"strconv"
"time"
)
const TimeZoneString = "Africa/Johannesburg"
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"
}
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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())
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
}
func CurrentLocation() *time.Location {
loc, _ := time.LoadLocation(TimeZoneString)
return loc
}
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) {
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
}