Use ParseDate in Parse

Also limit to English, or we get lots of false positives
This commit is contained in:
Dan Jones 2024-02-25 13:12:13 -06:00
commit 96c3b2ff30
3 changed files with 7 additions and 4 deletions

View file

@ -5,7 +5,6 @@ import (
"regexp" "regexp"
"strconv" "strconv"
"strings" "strings"
"time"
) )
func ParseBytes(in []byte) any { func ParseBytes(in []byte) any {
@ -34,7 +33,7 @@ func ParseString(in string) any {
return i return i
} else if f, err := strconv.ParseFloat(s, 64); err == nil { } else if f, err := strconv.ParseFloat(s, 64); err == nil {
return f return f
} else if t, err := time.Parse(time.RFC3339, s); err == nil { } else if t, err := ParseDate(s); err == nil {
return t return t
} else if err := json.Unmarshal([]byte(s), &j); err == nil { } else if err := json.Unmarshal([]byte(s), &j); err == nil {
return j return j

View file

@ -26,6 +26,7 @@ func ParseDate(in string) (t time.Time, err error) {
conf := dp.Configuration{ conf := dp.Configuration{
CurrentTime: time.Now().Local(), CurrentTime: time.Now().Local(),
ReturnTimeAsPeriod: true, ReturnTimeAsPeriod: true,
Languages: []string{"en"},
} }
d, err := dp.Parse(&conf, in) d, err := dp.Parse(&conf, in)

View file

@ -10,6 +10,7 @@ import (
func TestParse(t *testing.T) { func TestParse(t *testing.T) {
when := time.Now() when := time.Now()
now := when.Local().Truncate(time.Second)
tests := []struct { tests := []struct {
name string name string
in string in string
@ -22,6 +23,8 @@ func TestParse(t *testing.T) {
{"false", "false", false}, {"false", "false", false},
{"nil", "nil", nil}, {"nil", "nil", nil},
{"time", when.Format(time.RFC3339), when}, {"time", when.Format(time.RFC3339), when},
{"now", "now", now},
{"DateFormat", now.Format(DateFormat), now},
{"json-obj", `{"foo":"bar","baz":"quux"}`, json.RawMessage(`{"foo":"bar","baz":"quux"}`)}, {"json-obj", `{"foo":"bar","baz":"quux"}`, json.RawMessage(`{"foo":"bar","baz":"quux"}`)},
{"json-arr", `["foo",42,"bar", null,"quux", true]`, json.RawMessage(`["foo",42,"bar", null,"quux", true]`)}, {"json-arr", `["foo",42,"bar", null,"quux", true]`, json.RawMessage(`["foo",42,"bar", null,"quux", true]`)},
{"empty", "", ""}, {"empty", "", ""},
@ -48,7 +51,7 @@ func getParseTestRunner(in string, exp any) func(*testing.T) {
if expT, ok := exp.(time.Time); ok { if expT, ok := exp.(time.Time); ok {
ti, gotTime := out.(time.Time) ti, gotTime := out.(time.Time)
if assert.True(t, gotTime, "Should have gotten a time.Time, but didn't") { if assert.True(t, gotTime, "Should have gotten a time.Time, but didn't") {
assert.WithinRange(t, expT, ti.Add(-time.Second), ti.Add(time.Second)) assert.WithinRange(t, expT, ti.Add(-2*time.Second), ti.Add(2*time.Second))
} }
} else { } else {
assert.Equal(t, exp, out) assert.Equal(t, exp, out)
@ -57,7 +60,7 @@ func getParseTestRunner(in string, exp any) func(*testing.T) {
if expT, ok := exp.(time.Time); ok { if expT, ok := exp.(time.Time); ok {
ti, gotTime := out.(time.Time) ti, gotTime := out.(time.Time)
if assert.True(t, gotTime, "Should have gotten a time.Time, but didn't") { if assert.True(t, gotTime, "Should have gotten a time.Time, but didn't") {
assert.WithinRange(t, expT, ti.Add(-time.Second), ti.Add(time.Second)) assert.WithinRange(t, expT, ti.Add(-2*time.Second), ti.Add(2*time.Second))
} }
} else { } else {
assert.Equal(t, exp, out) assert.Equal(t, exp, out)