40 lines
731 B
Go

package dateparser
import (
"fmt"
godateparser "github.com/markusmobius/go-dateparser"
"strings"
"time"
)
type DateParser struct {
CurrentTimeFunc func() time.Time
}
func (d *DateParser) ParseDate(str string) (time.Time, error) {
str = strings.TrimSpace(str)
if len(str) == 0 {
return time.Time{}, fmt.Errorf("date string is empty")
}
dt, err := godateparser.Parse(&godateparser.Configuration{
CurrentTime: d.CurrentTimeFunc(),
}, str)
if err == nil {
return dt.Time, nil
}
parts := strings.Split(str, " ")
for len(parts) > 1 {
newStr := strings.Join(parts, " ")
dt, err = godateparser.Parse(nil, newStr)
if err == nil {
return dt.Time, err
}
parts = parts[1:]
}
return time.Time{}, err
}