diff --git a/date_utils/date_utils.go b/date_utils/date_utils.go index 76f4dfc68333df5396a75b239793185da2e08faf..68be30f42eb19c9446038911c492d6ed4c0fb913 100644 --- a/date_utils/date_utils.go +++ b/date_utils/date_utils.go @@ -289,6 +289,11 @@ func (t TradingHours) Validate() error { } for _, day := range t { + if day.StartTime == "" || day.EndTime == "" { + // Allow empty trading hours for a day to represent closed + continue + } + if !TimeBefore(day.StartTime, day.EndTime) { return errors.Error("Start time must be before end time") } @@ -336,19 +341,25 @@ func (t TradingHours) String() string { rangeStartIndex := 1 for i := 1; i < len(t); i++ { - startTime, err := time.Parse("15:04", t[i].StartTime) - if err != nil { - return "" - } + var times string - endTime, err := time.Parse("15:04", t[i].EndTime) - if err != nil { - return "" - } + if t[i].StartTime != "" && t[i].EndTime != "" { + startTime, err := time.Parse("15:04", t[i].StartTime) + if err != nil { + return "" + } + + endTime, err := time.Parse("15:04", t[i].EndTime) + if err != nil { + return "" + } - times := startTime.Format("3:04pm") + "-" + endTime.Format("3:04pm") - if t[i].StartTime == "00:00" && t[i].EndTime == "23:59" { - times = "All day" + times = startTime.Format("3:04pm") + "-" + endTime.Format("3:04pm") + if t[i].StartTime == "00:00" && t[i].EndTime == "23:59" { + times = "All day" + } + } else { + times = "Closed" } // If we're at the last element or the next day doesn't have the same times, we end the current range