mirror of
https://github.com/araddon/dateparse.git
synced 2025-09-18 04:48:17 +08:00
Support times after yyyy.mm.dd dates
Fix for this bug mentioned in https://github.com/araddon/dateparse/pull/134 Also, the other cases mentioned in this PR are not valid formats, so add them to the TestParseErrors test, to document that this is expected.
This commit is contained in:
74
parseany.go
74
parseany.go
@@ -69,18 +69,21 @@ const (
|
||||
dateDigitDashDigitDash
|
||||
dateDigitDot
|
||||
dateDigitDotDot
|
||||
dateDigitDotDotWs
|
||||
dateDigitDotDotT
|
||||
dateDigitDotDotOffset
|
||||
dateDigitSlash
|
||||
dateDigitYearSlash
|
||||
dateDigitSlashAlpha // 18
|
||||
dateDigitSlashAlpha // 21
|
||||
dateDigitColon
|
||||
dateDigitChineseYear
|
||||
dateDigitChineseYearWs
|
||||
dateDigitWs
|
||||
dateDigitWsMoYear // 23
|
||||
dateDigitWsMoYear // 26
|
||||
dateAlpha
|
||||
dateAlphaWs
|
||||
dateAlphaWsDigit
|
||||
dateAlphaWsDigitMore // 27
|
||||
dateAlphaWsDigitMore // 30
|
||||
dateAlphaWsDigitMoreWs
|
||||
dateAlphaWsDigitMoreWsYear
|
||||
dateAlphaWsMonth
|
||||
@@ -90,7 +93,7 @@ const (
|
||||
dateAlphaWsMore
|
||||
dateAlphaWsAtTime
|
||||
dateAlphaWsAlpha
|
||||
dateAlphaWsAlphaYearmaybe // 37
|
||||
dateAlphaWsAlphaYearmaybe // 40
|
||||
dateAlphaPeriodWsDigit
|
||||
dateAlphaSlash
|
||||
dateAlphaSlashDigit
|
||||
@@ -924,8 +927,52 @@ iterRunes:
|
||||
p.stateDate = dateDigitDotDot
|
||||
}
|
||||
}
|
||||
|
||||
case dateDigitDotDot:
|
||||
// iterate all the way through
|
||||
// dateYearDashDashT
|
||||
// 2006.01.02T15:04:05Z07:00
|
||||
// dateYearDashDashWs
|
||||
// 2013.04.01 22:43:22
|
||||
// dateYearDashDashOffset
|
||||
// 2020.07.20+00:00
|
||||
switch r {
|
||||
case '+', '-':
|
||||
p.offseti = i
|
||||
p.daylen = i - p.dayi
|
||||
p.stateDate = dateDigitDotDotOffset
|
||||
if !p.setDay() {
|
||||
return p, unknownErr(datestr)
|
||||
}
|
||||
case ' ':
|
||||
p.daylen = i - p.dayi
|
||||
p.stateDate = dateDigitDotDotWs
|
||||
p.stateTime = timeStart
|
||||
if !p.setDay() {
|
||||
return p, unknownErr(datestr)
|
||||
}
|
||||
break iterRunes
|
||||
case 'T':
|
||||
p.daylen = i - p.dayi
|
||||
p.stateDate = dateDigitDotDotT
|
||||
p.stateTime = timeStart
|
||||
if !p.setDay() {
|
||||
return p, unknownErr(datestr)
|
||||
}
|
||||
break iterRunes
|
||||
}
|
||||
|
||||
case dateDigitDotDotT:
|
||||
// dateYearDashDashT
|
||||
// 2006-01-02T15:04:05Z07:00
|
||||
// 2020-08-17T17:00:00:000+0100
|
||||
|
||||
case dateDigitDotDotOffset:
|
||||
// 2020-07-20+00:00
|
||||
switch r {
|
||||
case ':':
|
||||
p.set(p.offseti, "-07:00")
|
||||
}
|
||||
|
||||
case dateAlpha:
|
||||
// dateAlphaWS
|
||||
// Mon Jan _2 15:04:05 2006
|
||||
@@ -2177,6 +2224,23 @@ iterRunes:
|
||||
// 2018.09.30
|
||||
return p, nil
|
||||
|
||||
case dateDigitDotDotWs:
|
||||
// 2013.04.01
|
||||
return p, nil
|
||||
|
||||
case dateDigitDotDotT:
|
||||
return p, nil
|
||||
|
||||
case dateDigitDotDotOffset:
|
||||
// 2020.07.20+00:00
|
||||
switch len(p.datestr) - p.offseti {
|
||||
case 5:
|
||||
p.set(p.offseti, "-0700")
|
||||
case 6:
|
||||
p.set(p.offseti, "-07:00")
|
||||
}
|
||||
return p, nil
|
||||
|
||||
case dateDigitWsMoYear:
|
||||
// 2 Jan 2018
|
||||
// 2 Jan 18
|
||||
|
Reference in New Issue
Block a user