mirror of
https://github.com/araddon/dateparse.git
synced 2024-11-10 11:51:54 +08:00
Change to parse dashes
This commit is contained in:
parent
6b43995a97
commit
09b968c97f
76
parseany.go
76
parseany.go
@ -296,7 +296,38 @@ iterRunes:
|
|||||||
p.moi = i + 1
|
p.moi = i + 1
|
||||||
p.set(0, "2006")
|
p.set(0, "2006")
|
||||||
} else {
|
} else {
|
||||||
|
// Either Ambiguous dd/mm vs mm/dd OR dd/month/yy
|
||||||
|
// 08-May-2005
|
||||||
|
// 03-31-2005
|
||||||
|
// 31-03-2005
|
||||||
|
if i+2 < len(p.datestr) && unicode.IsLetter(rune(datestr[i+1])) {
|
||||||
|
// 08-May-2005
|
||||||
|
p.stateDate = dateDigitDashAlpha
|
||||||
|
p.moi = i + 1
|
||||||
|
p.daylen = 2
|
||||||
|
p.dayi = 0
|
||||||
|
p.setDay()
|
||||||
|
continue
|
||||||
|
}
|
||||||
p.stateDate = dateDigitDash
|
p.stateDate = dateDigitDash
|
||||||
|
// Ambiguous dd-mm vs mm-dd the bane of date-parsing
|
||||||
|
// 03-31-2005
|
||||||
|
// 31-03-2005
|
||||||
|
p.ambiguousMD = true
|
||||||
|
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 '/':
|
case '/':
|
||||||
// 08/May/2005
|
// 08/May/2005
|
||||||
@ -456,7 +487,6 @@ iterRunes:
|
|||||||
p.setDay()
|
p.setDay()
|
||||||
break iterRunes
|
break iterRunes
|
||||||
}
|
}
|
||||||
|
|
||||||
case dateYearDashDashT:
|
case dateYearDashDashT:
|
||||||
// dateYearDashDashT
|
// dateYearDashDashT
|
||||||
// 2006-01-02T15:04:05Z07:00
|
// 2006-01-02T15:04:05Z07:00
|
||||||
@ -479,6 +509,7 @@ iterRunes:
|
|||||||
p.set(p.moi, "Jan")
|
p.set(p.moi, "Jan")
|
||||||
p.dayi = i + 1
|
p.dayi = i + 1
|
||||||
}
|
}
|
||||||
|
|
||||||
case dateDigitDash:
|
case dateDigitDash:
|
||||||
// 13-Feb-03
|
// 13-Feb-03
|
||||||
// 29-Jun-2016
|
// 29-Jun-2016
|
||||||
@ -486,8 +517,43 @@ iterRunes:
|
|||||||
p.stateDate = dateDigitDashAlpha
|
p.stateDate = dateDigitDashAlpha
|
||||||
p.moi = i
|
p.moi = i
|
||||||
} else {
|
} else {
|
||||||
return nil, unknownErr(datestr)
|
// 03-19-2012 10:11:59
|
||||||
|
// 04-2-2014 03:00:37
|
||||||
|
// 3-1-2012 10:11:59
|
||||||
|
// 4-8-2014 22:05
|
||||||
|
// 3-1-2014
|
||||||
|
// 10-13-2014
|
||||||
|
// 01-02-2006
|
||||||
|
// 1-2-06
|
||||||
|
switch r {
|
||||||
|
case '-':
|
||||||
|
// This is the 2nd / so now we should know start pts of all of the dd, mm, yy
|
||||||
|
if p.preferMonthFirst {
|
||||||
|
if p.daylen == 0 {
|
||||||
|
p.daylen = i - p.dayi
|
||||||
|
p.setDay()
|
||||||
|
p.yeari = i + 1
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if p.molen == 0 {
|
||||||
|
p.molen = i - p.moi
|
||||||
|
p.setMonth()
|
||||||
|
p.yeari = i + 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Note no break, we are going to pass by and re-enter this dateDigitSlash
|
||||||
|
// and look for ending (space) or not (just date)
|
||||||
|
case ' ':
|
||||||
|
p.stateTime = timeStart
|
||||||
|
if p.yearlen == 0 {
|
||||||
|
p.yearlen = i - p.yeari
|
||||||
|
p.setYear()
|
||||||
|
}
|
||||||
|
break iterRunes
|
||||||
|
}
|
||||||
|
//return nil, unknownErr(datestr)
|
||||||
}
|
}
|
||||||
|
|
||||||
case dateDigitDashAlpha:
|
case dateDigitDashAlpha:
|
||||||
// 13-Feb-03
|
// 13-Feb-03
|
||||||
// 28-Feb-03
|
// 28-Feb-03
|
||||||
@ -1845,7 +1911,6 @@ iterRunes:
|
|||||||
}
|
}
|
||||||
|
|
||||||
return p, nil
|
return p, nil
|
||||||
|
|
||||||
case dateDigitDot:
|
case dateDigitDot:
|
||||||
// 2014.05
|
// 2014.05
|
||||||
p.molen = i - p.moi
|
p.molen = i - p.moi
|
||||||
@ -1907,6 +1972,11 @@ iterRunes:
|
|||||||
case dateAlphaWsDigitYearmaybe:
|
case dateAlphaWsDigitYearmaybe:
|
||||||
return p, nil
|
return p, nil
|
||||||
|
|
||||||
|
case dateDigitDash:
|
||||||
|
// 3/1/2014
|
||||||
|
// 10/13/2014
|
||||||
|
// 01/02/2006
|
||||||
|
return p, nil
|
||||||
case dateDigitSlash:
|
case dateDigitSlash:
|
||||||
// 3/1/2014
|
// 3/1/2014
|
||||||
// 10/13/2014
|
// 10/13/2014
|
||||||
|
@ -232,6 +232,10 @@ var testInputs = []dateTest{
|
|||||||
// dd/mon/yyy hh:mm:ss tz
|
// dd/mon/yyy hh:mm:ss tz
|
||||||
{in: "06/May/2008:08:11:17 -0700", out: "2008-05-06 15:11:17 +0000 UTC"},
|
{in: "06/May/2008:08:11:17 -0700", out: "2008-05-06 15:11:17 +0000 UTC"},
|
||||||
{in: "30/May/2008:08:11:17 -0700", out: "2008-05-30 15:11:17 +0000 UTC"},
|
{in: "30/May/2008:08:11:17 -0700", out: "2008-05-30 15:11:17 +0000 UTC"},
|
||||||
|
// mm-dd-yyyy
|
||||||
|
{in: "04-02-2014", out: "2014-04-02 00:00:00 +0000 UTC"},
|
||||||
|
{in: "03-31-2014", out: "2014-03-31 00:00:00 +0000 UTC"},
|
||||||
|
{in: "4-2-2014", out: "2014-04-02 00:00:00 +0000 UTC"},
|
||||||
// yyyy-mm-dd
|
// yyyy-mm-dd
|
||||||
{in: "2014-04-02", out: "2014-04-02 00:00:00 +0000 UTC"},
|
{in: "2014-04-02", out: "2014-04-02 00:00:00 +0000 UTC"},
|
||||||
{in: "2014-03-31", out: "2014-03-31 00:00:00 +0000 UTC"},
|
{in: "2014-03-31", out: "2014-03-31 00:00:00 +0000 UTC"},
|
||||||
@ -511,7 +515,7 @@ var testParseErrors = []dateTest{
|
|||||||
{in: "oct.-7-1970", err: true},
|
{in: "oct.-7-1970", err: true},
|
||||||
{in: "septe. 7, 1970", err: true},
|
{in: "septe. 7, 1970", err: true},
|
||||||
{in: "SeptemberRR 7th, 1970", err: true},
|
{in: "SeptemberRR 7th, 1970", err: true},
|
||||||
{in: "29-06-2016", err: true},
|
// {in: "29-06-2016", err: true},
|
||||||
// this is just testing the empty space up front
|
// this is just testing the empty space up front
|
||||||
{in: " 2018-01-02 17:08:09 -07:00", err: true},
|
{in: " 2018-01-02 17:08:09 -07:00", err: true},
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user