package tools import ( "time" dp "github.com/markusmobius/go-dateparser" "github.com/markusmobius/go-dateparser/date" ) const ( day = time.Hour * 24 ) // These are somewhat arbitrary, but reasonably useful min and max times var ( MinTime = time.Unix(-2208988800, 0) // Jan 1, 1900 MaxTime = MinTime.Add(1<<63 - 1) ) func ParseDate(in string) (t time.Time, err error) { if in == "min" { return MinTime, nil } if in == "max" { return MaxTime, nil } d, err := dp.Parse(nil, in) if err != nil { return } t = d.Time.Local() trunc := time.Second switch d.Period { case date.Minute: trunc = time.Minute case date.Hour: trunc = time.Hour case date.Day: trunc = day // @todo Handle other cases separately } t = t.Truncate(trunc) return }