From a6e0f632780b637244077bf393ffa4a8af960121 Mon Sep 17 00:00:00 2001 From: liutianqi Date: Mon, 1 Apr 2024 17:20:47 +0800 Subject: [PATCH] New date format 02.01.2006 Ref: araddon/dateparse/pull/133 --- parseany.go | 26 +++++++++++++++++++++----- parseany_test.go | 5 ++++- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/parseany.go b/parseany.go index e73d5b9..c60c13d 100644 --- a/parseany.go +++ b/parseany.go @@ -372,10 +372,20 @@ iterRunes: p.setYear() } else { p.ambiguousMD = true - p.moi = 0 - p.molen = i - p.setMonth() - p.dayi = i + 1 + if p.preferMonthFirst { + if p.molen == 0 { + // 03.31.2005 + p.molen = i + p.setMonth() + p.dayi = i + 1 + } + } else { + if p.daylen == 0 { + p.daylen = i + p.setDay() + p.moi = i + 1 + } + } } case ' ': @@ -730,9 +740,15 @@ iterRunes: p.yeari = i + 1 p.setDay() p.stateDate = dateDigitDotDot + } else if p.dayi == 0 && p.yearlen == 0 { + // 23.07.2002 + p.molen = i - p.moi + p.yeari = i + 1 + p.setMonth() + p.stateDate = dateDigitDotDot } else { // 2018.09.30 - //p.molen = 2 + // p.molen = 2 p.molen = i - p.moi p.dayi = i + 1 p.setMonth() diff --git a/parseany_test.go b/parseany_test.go index 5bb61ee..2491a27 100644 --- a/parseany_test.go +++ b/parseany_test.go @@ -402,6 +402,9 @@ var testInputs = []dateTest{ {in: "03.31.2014", out: "2014-03-31 00:00:00 +0000 UTC"}, // mm.dd.yy {in: "08.21.71", out: "1971-08-21 00:00:00 +0000 UTC"}, + // dd.mm.yyyy + {in: "23.07.1938", out: "1938-07-23 00:00:00 +0000 UTC"}, + {in: "23/07/1938", out: "1938-07-23 00:00:00 +0000 UTC"}, // yyyymmdd and similar {in: "2014", out: "2014-01-01 00:00:00 +0000 UTC"}, {in: "20140601", out: "2014-06-01 00:00:00 +0000 UTC"}, @@ -458,7 +461,7 @@ func TestParse(t *testing.T) { panic("whoops") } } else { - ts = MustParse(th.in) + ts = MustParse(th.in, RetryAmbiguousDateWithSwap(true)) got := fmt.Sprintf("%v", ts.In(time.UTC)) assert.Equal(t, th.out, got, "Expected %q but got %q from %q", th.out, got, th.in) if th.out != got {