|
|
|
@ -1,7 +1,6 @@
|
|
|
|
|
package date
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"strconv"
|
|
|
|
|
"time"
|
|
|
|
|
|
|
|
|
|
"github.com/tj/go-naturaldate"
|
|
|
|
@ -41,11 +40,26 @@ func TimeFromNatural(date string) (time.Time, error) {
|
|
|
|
|
if date == "" {
|
|
|
|
|
return time.Now(), nil
|
|
|
|
|
}
|
|
|
|
|
if i, err := strconv.ParseInt(date, 10, 0); err == nil && i >= 1000 && i < 5000 {
|
|
|
|
|
return time.Date(int(i), time.January, 0, 0, 0, 0, 0, time.UTC), nil
|
|
|
|
|
}
|
|
|
|
|
if t, err := time.Parse(time.RFC3339, date); err == nil {
|
|
|
|
|
return t, nil
|
|
|
|
|
}
|
|
|
|
|
return naturaldate.Parse(date, time.Now().UTC(), naturaldate.WithDirection(naturaldate.Past))
|
|
|
|
|
if t, err := time.ParseInLocation("2006-01-02T15:04:05", date, time.Local); err == nil {
|
|
|
|
|
return t, nil
|
|
|
|
|
}
|
|
|
|
|
if t, err := time.ParseInLocation("2006-01-02T15:04", date, time.Local); err == nil {
|
|
|
|
|
return t, nil
|
|
|
|
|
}
|
|
|
|
|
if t, err := time.ParseInLocation("2006-01-02", date, time.Local); err == nil {
|
|
|
|
|
return t, nil
|
|
|
|
|
}
|
|
|
|
|
if t, err := time.ParseInLocation("2006-01", date, time.Local); err == nil {
|
|
|
|
|
return t, nil
|
|
|
|
|
}
|
|
|
|
|
if t, err := time.ParseInLocation("2006", date, time.Local); err == nil {
|
|
|
|
|
return t, nil
|
|
|
|
|
}
|
|
|
|
|
if t, err := time.ParseInLocation("15:04", date, time.Local); err == nil {
|
|
|
|
|
return t, nil
|
|
|
|
|
}
|
|
|
|
|
return naturaldate.Parse(date, time.Now(), naturaldate.WithDirection(naturaldate.Past))
|
|
|
|
|
}
|
|
|
|
|