mirror of
https://github.com/araddon/dateparse.git
synced 2024-11-10 11:51:54 +08:00
parent
00e168d348
commit
313f117957
@ -197,13 +197,17 @@ func main() {
|
|||||||
| Thu, 4 Jan 2018 17:53:36 +0000 | 2018-01-04 17:53:36 +0000 UTC |
|
| Thu, 4 Jan 2018 17:53:36 +0000 | 2018-01-04 17:53:36 +0000 UTC |
|
||||||
| Mon Aug 10 15:44:11 UTC+0100 2015 | 2015-08-10 15:44:11 +0000 UTC |
|
| Mon Aug 10 15:44:11 UTC+0100 2015 | 2015-08-10 15:44:11 +0000 UTC |
|
||||||
| Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time) | 2015-07-03 18:04:07 +0100 GMT |
|
| Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time) | 2015-07-03 18:04:07 +0100 GMT |
|
||||||
|
| September 17, 2012 10:09am | 2012-09-17 10:09:00 +0000 UTC |
|
||||||
| September 17, 2012 at 10:09am PST-08 | 2012-09-17 10:09:00 -0800 PST |
|
| September 17, 2012 at 10:09am PST-08 | 2012-09-17 10:09:00 -0800 PST |
|
||||||
|
| September 17, 2012, 10:10:09 | 2012-09-17 10:10:09 +0000 UTC |
|
||||||
| October 7, 1970 | 1970-10-07 00:00:00 +0000 UTC |
|
| October 7, 1970 | 1970-10-07 00:00:00 +0000 UTC |
|
||||||
|
| October 7th, 1970 | 1970-10-07 00:00:00 +0000 UTC |
|
||||||
| 12 Feb 2006, 19:17 | 2006-02-12 19:17:00 +0000 UTC |
|
| 12 Feb 2006, 19:17 | 2006-02-12 19:17:00 +0000 UTC |
|
||||||
| 12 Feb 2006 19:17 | 2006-02-12 19:17:00 +0000 UTC |
|
| 12 Feb 2006 19:17 | 2006-02-12 19:17:00 +0000 UTC |
|
||||||
| 7 oct 70 | 1970-10-07 00:00:00 +0000 UTC |
|
| 7 oct 70 | 1970-10-07 00:00:00 +0000 UTC |
|
||||||
| 7 oct 1970 | 1970-10-07 00:00:00 +0000 UTC |
|
| 7 oct 1970 | 1970-10-07 00:00:00 +0000 UTC |
|
||||||
| 03 February 2013 | 2013-02-03 00:00:00 +0000 UTC |
|
| 03 February 2013 | 2013-02-03 00:00:00 +0000 UTC |
|
||||||
|
| 1 July 2013 | 2013-07-01 00:00:00 +0000 UTC |
|
||||||
| 2013-Feb-03 | 2013-02-03 00:00:00 +0000 UTC |
|
| 2013-Feb-03 | 2013-02-03 00:00:00 +0000 UTC |
|
||||||
| 3/31/2014 | 2014-03-31 00:00:00 +0000 UTC |
|
| 3/31/2014 | 2014-03-31 00:00:00 +0000 UTC |
|
||||||
| 03/31/2014 | 2014-03-31 00:00:00 +0000 UTC |
|
| 03/31/2014 | 2014-03-31 00:00:00 +0000 UTC |
|
||||||
|
@ -25,8 +25,11 @@ var examples = []string{
|
|||||||
"Thu, 4 Jan 2018 17:53:36 +0000",
|
"Thu, 4 Jan 2018 17:53:36 +0000",
|
||||||
"Mon Aug 10 15:44:11 UTC+0100 2015",
|
"Mon Aug 10 15:44:11 UTC+0100 2015",
|
||||||
"Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time)",
|
"Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time)",
|
||||||
|
"September 17, 2012 10:09am",
|
||||||
"September 17, 2012 at 10:09am PST-08",
|
"September 17, 2012 at 10:09am PST-08",
|
||||||
|
"September 17, 2012, 10:10:09",
|
||||||
"October 7, 1970",
|
"October 7, 1970",
|
||||||
|
"October 7th, 1970",
|
||||||
"12 Feb 2006, 19:17",
|
"12 Feb 2006, 19:17",
|
||||||
"12 Feb 2006 19:17",
|
"12 Feb 2006 19:17",
|
||||||
"7 oct 70",
|
"7 oct 70",
|
||||||
@ -155,13 +158,17 @@ func main() {
|
|||||||
| Thu, 4 Jan 2018 17:53:36 +0000 | 2018-01-04 17:53:36 +0000 UTC |
|
| Thu, 4 Jan 2018 17:53:36 +0000 | 2018-01-04 17:53:36 +0000 UTC |
|
||||||
| Mon Aug 10 15:44:11 UTC+0100 2015 | 2015-08-10 15:44:11 +0000 UTC |
|
| Mon Aug 10 15:44:11 UTC+0100 2015 | 2015-08-10 15:44:11 +0000 UTC |
|
||||||
| Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time) | 2015-07-03 18:04:07 +0100 GMT |
|
| Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time) | 2015-07-03 18:04:07 +0100 GMT |
|
||||||
|
| September 17, 2012 10:09am | 2012-09-17 10:09:00 +0000 UTC |
|
||||||
| September 17, 2012 at 10:09am PST-08 | 2012-09-17 10:09:00 -0800 PST |
|
| September 17, 2012 at 10:09am PST-08 | 2012-09-17 10:09:00 -0800 PST |
|
||||||
|
| September 17, 2012, 10:10:09 | 2012-09-17 10:10:09 +0000 UTC |
|
||||||
| October 7, 1970 | 1970-10-07 00:00:00 +0000 UTC |
|
| October 7, 1970 | 1970-10-07 00:00:00 +0000 UTC |
|
||||||
|
| October 7th, 1970 | 1970-10-07 00:00:00 +0000 UTC |
|
||||||
| 12 Feb 2006, 19:17 | 2006-02-12 19:17:00 +0000 UTC |
|
| 12 Feb 2006, 19:17 | 2006-02-12 19:17:00 +0000 UTC |
|
||||||
| 12 Feb 2006 19:17 | 2006-02-12 19:17:00 +0000 UTC |
|
| 12 Feb 2006 19:17 | 2006-02-12 19:17:00 +0000 UTC |
|
||||||
| 7 oct 70 | 1970-10-07 00:00:00 +0000 UTC |
|
| 7 oct 70 | 1970-10-07 00:00:00 +0000 UTC |
|
||||||
| 7 oct 1970 | 1970-10-07 00:00:00 +0000 UTC |
|
| 7 oct 1970 | 1970-10-07 00:00:00 +0000 UTC |
|
||||||
| 03 February 2013 | 2013-02-03 00:00:00 +0000 UTC |
|
| 03 February 2013 | 2013-02-03 00:00:00 +0000 UTC |
|
||||||
|
| 1 July 2013 | 2013-07-01 00:00:00 +0000 UTC |
|
||||||
| 2013-Feb-03 | 2013-02-03 00:00:00 +0000 UTC |
|
| 2013-Feb-03 | 2013-02-03 00:00:00 +0000 UTC |
|
||||||
| 3/31/2014 | 2014-03-31 00:00:00 +0000 UTC |
|
| 3/31/2014 | 2014-03-31 00:00:00 +0000 UTC |
|
||||||
| 03/31/2014 | 2014-03-31 00:00:00 +0000 UTC |
|
| 03/31/2014 | 2014-03-31 00:00:00 +0000 UTC |
|
||||||
@ -225,4 +232,5 @@ func main() {
|
|||||||
| 1384216367111222 | 2013-11-12 00:32:47.111222 +0000 UTC |
|
| 1384216367111222 | 2013-11-12 00:32:47.111222 +0000 UTC |
|
||||||
| 1384216367111222333 | 2013-11-12 00:32:47.111222333 +0000 UTC |
|
| 1384216367111222333 | 2013-11-12 00:32:47.111222333 +0000 UTC |
|
||||||
+-------------------------------------------------------+-----------------------------------------+
|
+-------------------------------------------------------+-----------------------------------------+
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
296
parseany.go
296
parseany.go
@ -36,31 +36,35 @@ type dateState uint8
|
|||||||
type timeState uint8
|
type timeState uint8
|
||||||
|
|
||||||
const (
|
const (
|
||||||
dateStart dateState = iota
|
dateStart dateState = iota // 0
|
||||||
dateDigit
|
dateDigit
|
||||||
dateYearDash
|
dateYearDash
|
||||||
dateYearDashAlphaDash
|
dateYearDashAlphaDash
|
||||||
dateYearDashDash
|
dateYearDashDash
|
||||||
dateYearDashDashWs
|
dateYearDashDashWs // 5
|
||||||
dateYearDashDashT
|
dateYearDashDashT
|
||||||
dateDigitDash
|
dateDigitDash
|
||||||
dateDigitDashAlpha
|
dateDigitDashAlpha
|
||||||
dateDigitDashAlphaDash
|
dateDigitDashAlphaDash
|
||||||
dateDigitDot
|
dateDigitDot // 10
|
||||||
dateDigitDotDot
|
dateDigitDotDot
|
||||||
dateDigitSlash
|
dateDigitSlash
|
||||||
dateDigitChineseYear
|
dateDigitChineseYear
|
||||||
dateDigitChineseYearWs
|
dateDigitChineseYearWs
|
||||||
dateDigitWs
|
dateDigitWs // 15
|
||||||
dateDigitWsMoYear
|
dateDigitWsMoYear
|
||||||
dateDigitWsMolong
|
dateDigitWsMolong
|
||||||
dateAlpha
|
dateAlpha
|
||||||
dateAlphaWs
|
dateAlphaWs
|
||||||
dateAlphaWsDigit
|
dateAlphaWsDigit // 20
|
||||||
dateAlphaWsDigitComma
|
dateAlphaWsDigitMore
|
||||||
dateAlphaWsDigitCommaWs
|
dateAlphaWsDigitMoreWs
|
||||||
dateAlphaWsDigitCommaWsYear
|
dateAlphaWsDigitMoreWsYear
|
||||||
dateAlphaWsMonth
|
dateAlphaWsMonth
|
||||||
|
dateAlphaWsMonthMore
|
||||||
|
dateAlphaWsMonthSuffix
|
||||||
|
dateAlphaWsMore
|
||||||
|
dateAlphaWsAtTime
|
||||||
dateAlphaWsAlpha
|
dateAlphaWsAlpha
|
||||||
dateAlphaWsAlphaYearmaybe
|
dateAlphaWsAlphaYearmaybe
|
||||||
dateAlphaPeriodWsDigit
|
dateAlphaPeriodWsDigit
|
||||||
@ -470,7 +474,6 @@ iterRunes:
|
|||||||
// we can parse may with either. BUT, that means the
|
// we can parse may with either. BUT, that means the
|
||||||
// format may not be correct?
|
// format may not be correct?
|
||||||
// mo := strings.ToLower(datestr[p.daylen+1 : i])
|
// mo := strings.ToLower(datestr[p.daylen+1 : i])
|
||||||
// gou.Warnf("mo = %q", mo)
|
|
||||||
p.moi = p.daylen + 1
|
p.moi = p.daylen + 1
|
||||||
p.molen = i - p.moi
|
p.molen = i - p.moi
|
||||||
p.set(p.moi, "Jan")
|
p.set(p.moi, "Jan")
|
||||||
@ -532,8 +535,10 @@ iterRunes:
|
|||||||
// oct 1, 1970
|
// oct 1, 1970
|
||||||
// dateAlphaWsMonth
|
// dateAlphaWsMonth
|
||||||
// April 8, 2009
|
// April 8, 2009
|
||||||
// dateAlphaWsMonthTime
|
// dateAlphaWsMore
|
||||||
|
// dateAlphaWsAtTime
|
||||||
// January 02, 2006 at 3:04pm MST-07
|
// January 02, 2006 at 3:04pm MST-07
|
||||||
|
//
|
||||||
// dateAlphaPeriodWsDigit
|
// dateAlphaPeriodWsDigit
|
||||||
// oct. 1, 1970
|
// oct. 1, 1970
|
||||||
// dateWeekdayComma
|
// dateWeekdayComma
|
||||||
@ -549,32 +554,35 @@ iterRunes:
|
|||||||
// Mon, 02-Jan-06 15:04:05 MST
|
// Mon, 02-Jan-06 15:04:05 MST
|
||||||
switch {
|
switch {
|
||||||
case r == ' ':
|
case r == ' ':
|
||||||
|
// X
|
||||||
|
// April 8, 2009
|
||||||
if i > 3 {
|
if i > 3 {
|
||||||
prefix := strings.ToLower(datestr[0:i])
|
// Check to see if the alpha is name of month? or Day?
|
||||||
for _, month := range months {
|
month := strings.ToLower(datestr[0:i])
|
||||||
if prefix == month {
|
if isMonthFull(month) {
|
||||||
|
p.fullMonth = month
|
||||||
// len(" 31, 2018") = 9
|
// len(" 31, 2018") = 9
|
||||||
if len(datestr[i:]) < 10 {
|
if len(datestr[i:]) < 10 {
|
||||||
// April 8, 2009
|
// April 8, 2009
|
||||||
p.dayi = i + 1
|
|
||||||
p.stateDate = dateAlphaWsMonth
|
p.stateDate = dateAlphaWsMonth
|
||||||
|
} else {
|
||||||
|
p.stateDate = dateAlphaWsMore
|
||||||
|
}
|
||||||
|
p.dayi = i + 1
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
if p.stateDate != dateAlphaWsMonth {
|
|
||||||
// September 17, 2012 at 5:00pm UTC-05
|
|
||||||
// This one doesn't follow standard parse methodologies. the "January"
|
|
||||||
// is difficult to use the format string replace method because of its variable-length (march, june)
|
|
||||||
// so we just use this format here. If we see more similar to this we will do something else.
|
|
||||||
p.format = []byte("January 02, 2006 at 3:04pm MST-07")
|
|
||||||
return p, nil
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
|
// This is possibly ambiguous? May will parse as either though.
|
||||||
|
// So, it could return in-correct format.
|
||||||
|
// May 05, 2005, 05:05:05
|
||||||
|
// May 05 2005, 05:05:05
|
||||||
|
// Jul 05, 2005, 05:05:05
|
||||||
p.stateDate = dateAlphaWs
|
p.stateDate = dateAlphaWs
|
||||||
}
|
}
|
||||||
|
|
||||||
case r == ',':
|
case r == ',':
|
||||||
|
// Mon, 02 Jan 2006
|
||||||
// p.moi = 0
|
// p.moi = 0
|
||||||
// p.molen = i
|
// p.molen = i
|
||||||
if i == 3 {
|
if i == 3 {
|
||||||
@ -613,6 +621,7 @@ iterRunes:
|
|||||||
// Mon Aug 10 15:44:11 UTC+0100 2015
|
// Mon Aug 10 15:44:11 UTC+0100 2015
|
||||||
// dateAlphaWsDigit
|
// dateAlphaWsDigit
|
||||||
// May 8, 2009 5:57:51 PM
|
// May 8, 2009 5:57:51 PM
|
||||||
|
// May 8 2009 5:57:51 PM
|
||||||
// oct 1, 1970
|
// oct 1, 1970
|
||||||
// oct 7, '70
|
// oct 7, '70
|
||||||
switch {
|
switch {
|
||||||
@ -628,34 +637,49 @@ iterRunes:
|
|||||||
|
|
||||||
case dateAlphaWsDigit:
|
case dateAlphaWsDigit:
|
||||||
// May 8, 2009 5:57:51 PM
|
// May 8, 2009 5:57:51 PM
|
||||||
|
// May 8 2009 5:57:51 PM
|
||||||
// oct 1, 1970
|
// oct 1, 1970
|
||||||
// oct 7, '70
|
// oct 7, '70
|
||||||
// oct. 7, 1970
|
// oct. 7, 1970
|
||||||
//gou.Debugf("%d %s dateAlphaWsDigit %s %s", i, string(r), p.ds(), p.ts())
|
|
||||||
if r == ',' {
|
if r == ',' {
|
||||||
p.daylen = i - p.dayi
|
p.daylen = i - p.dayi
|
||||||
p.setDay()
|
p.setDay()
|
||||||
p.stateDate = dateAlphaWsDigitComma
|
p.stateDate = dateAlphaWsDigitMore
|
||||||
|
} else if r == ' ' {
|
||||||
|
p.daylen = i - p.dayi
|
||||||
|
p.setDay()
|
||||||
|
p.yeari = i + 1
|
||||||
|
p.stateDate = dateAlphaWsDigitMoreWs
|
||||||
|
} else if unicode.IsLetter(r) {
|
||||||
|
p.stateDate = dateAlphaWsMonthSuffix
|
||||||
|
i--
|
||||||
}
|
}
|
||||||
case dateAlphaWsDigitComma:
|
case dateAlphaWsDigitMore:
|
||||||
// x
|
// x
|
||||||
// May 8, 2009 5:57:51 PM
|
// May 8, 2009 5:57:51 PM
|
||||||
|
// May 05, 2005, 05:05:05
|
||||||
|
// May 05 2005, 05:05:05
|
||||||
// oct 1, 1970
|
// oct 1, 1970
|
||||||
// oct 7, '70
|
// oct 7, '70
|
||||||
if r == ' ' {
|
if r == ' ' {
|
||||||
p.stateDate = dateAlphaWsDigitCommaWs
|
|
||||||
p.yeari = i + 1
|
p.yeari = i + 1
|
||||||
|
p.stateDate = dateAlphaWsDigitMoreWs
|
||||||
}
|
}
|
||||||
case dateAlphaWsDigitCommaWs:
|
case dateAlphaWsDigitMoreWs:
|
||||||
// x
|
// x
|
||||||
// May 8, 2009 5:57:51 PM
|
// May 8, 2009 5:57:51 PM
|
||||||
|
// May 05, 2005, 05:05:05
|
||||||
// oct 1, 1970
|
// oct 1, 1970
|
||||||
// oct 7, '70
|
// oct 7, '70
|
||||||
switch r {
|
switch r {
|
||||||
case '\'':
|
case '\'':
|
||||||
p.yeari = i + 1
|
p.yeari = i + 1
|
||||||
case ' ':
|
case ' ', ',':
|
||||||
p.stateDate = dateAlphaWsDigitCommaWsYear
|
// x
|
||||||
|
// May 8, 2009 5:57:51 PM
|
||||||
|
// x
|
||||||
|
// May 8, 2009, 5:57:51 PM
|
||||||
|
p.stateDate = dateAlphaWsDigitMoreWsYear
|
||||||
p.yearlen = i - p.yeari
|
p.yearlen = i - p.yeari
|
||||||
p.setYear()
|
p.setYear()
|
||||||
p.stateTime = timeStart
|
p.stateTime = timeStart
|
||||||
@ -670,7 +694,6 @@ iterRunes:
|
|||||||
// Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time)
|
// Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time)
|
||||||
if r == ' ' {
|
if r == ' ' {
|
||||||
if p.dayi > 0 {
|
if p.dayi > 0 {
|
||||||
|
|
||||||
p.daylen = i - p.dayi
|
p.daylen = i - p.dayi
|
||||||
p.setDay()
|
p.setDay()
|
||||||
p.yeari = i + 1
|
p.yeari = i + 1
|
||||||
@ -701,13 +724,114 @@ iterRunes:
|
|||||||
|
|
||||||
case dateAlphaWsMonth:
|
case dateAlphaWsMonth:
|
||||||
// April 8, 2009
|
// April 8, 2009
|
||||||
if r == ',' {
|
// April 8 2009
|
||||||
if i-p.dayi == 2 {
|
switch r {
|
||||||
p.format = []byte("January 02, 2006")
|
case ' ', ',':
|
||||||
return p, nil
|
// x
|
||||||
|
// June 8, 2009
|
||||||
|
// x
|
||||||
|
// June 8 2009
|
||||||
|
if p.daylen == 0 {
|
||||||
|
p.daylen = i - p.dayi
|
||||||
|
p.setDay()
|
||||||
}
|
}
|
||||||
p.format = []byte("January 2, 2006")
|
case 's', 'S', 'r', 'R', 't', 'T', 'n', 'N':
|
||||||
return p, nil
|
// st, rd, nd, st
|
||||||
|
i--
|
||||||
|
p.stateDate = dateAlphaWsMonthSuffix
|
||||||
|
default:
|
||||||
|
if p.daylen > 0 && p.yeari == 0 {
|
||||||
|
p.yeari = i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case dateAlphaWsMonthMore:
|
||||||
|
// X
|
||||||
|
// January 02, 2006, 15:04:05
|
||||||
|
// January 02 2006, 15:04:05
|
||||||
|
// January 02, 2006 15:04:05
|
||||||
|
// January 02 2006 15:04:05
|
||||||
|
switch r {
|
||||||
|
case ',':
|
||||||
|
p.yearlen = i - p.yeari
|
||||||
|
p.setYear()
|
||||||
|
p.stateTime = timeStart
|
||||||
|
i++
|
||||||
|
break iterRunes
|
||||||
|
case ' ':
|
||||||
|
p.yearlen = i - p.yeari
|
||||||
|
p.setYear()
|
||||||
|
p.stateTime = timeStart
|
||||||
|
break iterRunes
|
||||||
|
}
|
||||||
|
case dateAlphaWsMonthSuffix:
|
||||||
|
// x
|
||||||
|
// April 8th, 2009
|
||||||
|
// April 8th 2009
|
||||||
|
switch r {
|
||||||
|
case 't', 'T':
|
||||||
|
if p.nextIs(i, 'h') || p.nextIs(i, 'h') {
|
||||||
|
if len(datestr) > i+2 {
|
||||||
|
return parseTime(fmt.Sprintf("%s%s", p.datestr[0:i], p.datestr[i+2:]), loc)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case 'n', 'N':
|
||||||
|
if p.nextIs(i, 'd') || p.nextIs(i, 'D') {
|
||||||
|
if len(datestr) > i+2 {
|
||||||
|
return parseTime(fmt.Sprintf("%s%s", p.datestr[0:i], p.datestr[i+2:]), loc)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case 's', 'S':
|
||||||
|
if p.nextIs(i, 't') || p.nextIs(i, 'T') {
|
||||||
|
if len(datestr) > i+2 {
|
||||||
|
return parseTime(fmt.Sprintf("%s%s", p.datestr[0:i], p.datestr[i+2:]), loc)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// case ',':
|
||||||
|
// // x
|
||||||
|
// // April 8th, 2009
|
||||||
|
// case ' ':
|
||||||
|
// // x
|
||||||
|
// // April 8th 2009
|
||||||
|
// // p.yeari = i + 1
|
||||||
|
// p.yeari = i + 1
|
||||||
|
// p.stateDate = dateAlphaWsMonthMore
|
||||||
|
}
|
||||||
|
case dateAlphaWsMore:
|
||||||
|
// January 02, 2006, 15:04:05
|
||||||
|
// January 02 2006, 15:04:05
|
||||||
|
// January 2nd, 2006, 15:04:05
|
||||||
|
// January 2nd 2006, 15:04:05
|
||||||
|
// September 17, 2012 at 5:00pm UTC-05
|
||||||
|
switch {
|
||||||
|
case r == ',':
|
||||||
|
// x
|
||||||
|
// January 02, 2006, 15:04:05
|
||||||
|
if p.nextIs(i, ' ') {
|
||||||
|
p.daylen = i - p.dayi
|
||||||
|
p.setDay()
|
||||||
|
p.yeari = i + 2
|
||||||
|
p.stateDate = dateAlphaWsMonthMore
|
||||||
|
i++
|
||||||
|
}
|
||||||
|
|
||||||
|
case r == ' ':
|
||||||
|
// x
|
||||||
|
// January 02 2006, 15:04:05
|
||||||
|
p.daylen = i - p.dayi
|
||||||
|
p.setDay()
|
||||||
|
p.yeari = i + 1
|
||||||
|
p.stateDate = dateAlphaWsMonthMore
|
||||||
|
case unicode.IsDigit(r):
|
||||||
|
// XX
|
||||||
|
// January 02, 2006, 15:04:05
|
||||||
|
continue
|
||||||
|
case unicode.IsLetter(r):
|
||||||
|
// X
|
||||||
|
// January 2nd, 2006, 15:04:05
|
||||||
|
p.daylen = i - p.dayi
|
||||||
|
p.setDay()
|
||||||
|
p.stateDate = dateAlphaWsMonthSuffix
|
||||||
|
i--
|
||||||
}
|
}
|
||||||
|
|
||||||
case dateAlphaPeriodWsDigit:
|
case dateAlphaPeriodWsDigit:
|
||||||
@ -736,7 +860,6 @@ iterRunes:
|
|||||||
p.daylen = i - p.dayi
|
p.daylen = i - p.dayi
|
||||||
p.setDay()
|
p.setDay()
|
||||||
} else if p.yeari == 0 {
|
} else if p.yeari == 0 {
|
||||||
|
|
||||||
p.yeari = i + 1
|
p.yeari = i + 1
|
||||||
p.molen = i - p.moi
|
p.molen = i - p.moi
|
||||||
p.set(p.moi, "Jan")
|
p.set(p.moi, "Jan")
|
||||||
@ -805,6 +928,7 @@ iterRunes:
|
|||||||
// timeWs
|
// timeWs
|
||||||
// 05:24:37 PM
|
// 05:24:37 PM
|
||||||
// 06:20:00 UTC
|
// 06:20:00 UTC
|
||||||
|
// 06:20:00 UTC-05
|
||||||
// 00:12:00 +0000 UTC
|
// 00:12:00 +0000 UTC
|
||||||
// 22:18:00 +0000 UTC m=+0.000000001
|
// 22:18:00 +0000 UTC m=+0.000000001
|
||||||
// 15:04:05 -0700
|
// 15:04:05 -0700
|
||||||
@ -864,6 +988,38 @@ iterRunes:
|
|||||||
} else {
|
} else {
|
||||||
p.seclen = i - p.seci
|
p.seclen = i - p.seci
|
||||||
}
|
}
|
||||||
|
case 'a', 'A':
|
||||||
|
if p.nextIs(i, 't') || p.nextIs(i, 'T') {
|
||||||
|
// x
|
||||||
|
// September 17, 2012 at 5:00pm UTC-05
|
||||||
|
i++ // skip t
|
||||||
|
if p.nextIs(i, ' ') {
|
||||||
|
// x
|
||||||
|
// September 17, 2012 at 5:00pm UTC-05
|
||||||
|
i++ // skip '
|
||||||
|
p.houri = 0 // reset hour
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
switch {
|
||||||
|
case r == 'a' && p.nextIs(i, 'm'):
|
||||||
|
p.coalesceTime(i)
|
||||||
|
p.set(i, "am")
|
||||||
|
case r == 'A' && p.nextIs(i, 'M'):
|
||||||
|
p.coalesceTime(i)
|
||||||
|
p.set(i, "PM")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
case 'p', 'P':
|
||||||
|
// Could be AM/PM
|
||||||
|
switch {
|
||||||
|
case r == 'p' && p.nextIs(i, 'm'):
|
||||||
|
p.coalesceTime(i)
|
||||||
|
p.set(i, "pm")
|
||||||
|
case r == 'P' && p.nextIs(i, 'M'):
|
||||||
|
p.coalesceTime(i)
|
||||||
|
p.set(i, "PM")
|
||||||
|
}
|
||||||
case ' ':
|
case ' ':
|
||||||
p.coalesceTime(i)
|
p.coalesceTime(i)
|
||||||
p.stateTime = timeWs
|
p.stateTime = timeWs
|
||||||
@ -875,7 +1031,6 @@ iterRunes:
|
|||||||
p.seci = i + 1
|
p.seci = i + 1
|
||||||
p.minlen = i - p.mini
|
p.minlen = i - p.mini
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
case timeOffset:
|
case timeOffset:
|
||||||
// 19:55:00+0100
|
// 19:55:00+0100
|
||||||
@ -888,6 +1043,7 @@ iterRunes:
|
|||||||
case timeWs:
|
case timeWs:
|
||||||
// timeWsAlpha
|
// timeWsAlpha
|
||||||
// 06:20:00 UTC
|
// 06:20:00 UTC
|
||||||
|
// 06:20:00 UTC-05
|
||||||
// 15:44:11 UTC+0100 2015
|
// 15:44:11 UTC+0100 2015
|
||||||
// 18:04:07 GMT+0100 (GMT Daylight Time)
|
// 18:04:07 GMT+0100 (GMT Daylight Time)
|
||||||
// 17:57:51 MST 2009
|
// 17:57:51 MST 2009
|
||||||
@ -916,6 +1072,7 @@ iterRunes:
|
|||||||
default:
|
default:
|
||||||
if unicode.IsLetter(r) {
|
if unicode.IsLetter(r) {
|
||||||
// 06:20:00 UTC
|
// 06:20:00 UTC
|
||||||
|
// 06:20:00 UTC-05
|
||||||
// 15:44:11 UTC+0100 2015
|
// 15:44:11 UTC+0100 2015
|
||||||
// 17:57:51 MST 2009
|
// 17:57:51 MST 2009
|
||||||
p.tzi = i
|
p.tzi = i
|
||||||
@ -929,6 +1086,7 @@ iterRunes:
|
|||||||
}
|
}
|
||||||
case timeWsAlpha:
|
case timeWsAlpha:
|
||||||
// 06:20:00 UTC
|
// 06:20:00 UTC
|
||||||
|
// 06:20:00 UTC-05
|
||||||
// timeWsAlphaWs
|
// timeWsAlphaWs
|
||||||
// 17:57:51 MST 2009
|
// 17:57:51 MST 2009
|
||||||
// timeWsAlphaZoneOffset
|
// timeWsAlphaZoneOffset
|
||||||
@ -962,6 +1120,7 @@ iterRunes:
|
|||||||
// 17:57:51 MST 2009
|
// 17:57:51 MST 2009
|
||||||
|
|
||||||
case timeWsAlphaZoneOffset:
|
case timeWsAlphaZoneOffset:
|
||||||
|
// 06:20:00 UTC-05
|
||||||
// timeWsAlphaZoneOffset
|
// timeWsAlphaZoneOffset
|
||||||
// timeWsAlphaZoneOffsetWs
|
// timeWsAlphaZoneOffsetWs
|
||||||
// timeWsAlphaZoneOffsetWsExtra
|
// timeWsAlphaZoneOffsetWsExtra
|
||||||
@ -1258,6 +1417,14 @@ iterRunes:
|
|||||||
p.setYear()
|
p.setYear()
|
||||||
case timeWsAlphaZoneOffsetWsExtra:
|
case timeWsAlphaZoneOffsetWsExtra:
|
||||||
p.trimExtra()
|
p.trimExtra()
|
||||||
|
case timeWsAlphaZoneOffset:
|
||||||
|
// 06:20:00 UTC-05
|
||||||
|
if i-p.offseti < 4 {
|
||||||
|
p.set(p.offseti, "-07")
|
||||||
|
} else {
|
||||||
|
p.set(p.offseti, "-0700")
|
||||||
|
}
|
||||||
|
|
||||||
case timePeriod:
|
case timePeriod:
|
||||||
p.mslen = i - p.msi
|
p.mslen = i - p.msi
|
||||||
case timeOffset:
|
case timeOffset:
|
||||||
@ -1411,14 +1578,23 @@ iterRunes:
|
|||||||
p.format = []byte("2 January 2006")
|
p.format = []byte("2 January 2006")
|
||||||
return p, nil // parse("2 January 2006", datestr, loc)
|
return p, nil // parse("2 January 2006", datestr, loc)
|
||||||
|
|
||||||
case dateAlphaWsDigitCommaWs:
|
case dateAlphaWsMonth:
|
||||||
|
p.yearlen = i - p.yeari
|
||||||
|
p.setYear()
|
||||||
|
return p, nil
|
||||||
|
|
||||||
|
case dateAlphaWsMonthMore:
|
||||||
|
return p, nil
|
||||||
|
|
||||||
|
case dateAlphaWsDigitMoreWs:
|
||||||
// oct 1, 1970
|
// oct 1, 1970
|
||||||
p.yearlen = i - p.yeari
|
p.yearlen = i - p.yeari
|
||||||
p.setYear()
|
p.setYear()
|
||||||
return p, nil
|
return p, nil
|
||||||
|
|
||||||
case dateAlphaWsDigitCommaWsYear:
|
case dateAlphaWsDigitMoreWsYear:
|
||||||
// May 8, 2009 5:57:51 PM
|
// May 8, 2009 5:57:51 PM
|
||||||
|
// Jun 7, 2005, 05:57:51
|
||||||
return p, nil
|
return p, nil
|
||||||
|
|
||||||
case dateAlphaWsAlpha:
|
case dateAlphaWsAlpha:
|
||||||
@ -1468,6 +1644,7 @@ type parser struct {
|
|||||||
stateTime timeState
|
stateTime timeState
|
||||||
format []byte
|
format []byte
|
||||||
datestr string
|
datestr string
|
||||||
|
fullMonth string
|
||||||
skip int
|
skip int
|
||||||
extra int
|
extra int
|
||||||
part1Len int
|
part1Len int
|
||||||
@ -1503,6 +1680,14 @@ func newParser(dateStr string, loc *time.Location) *parser {
|
|||||||
p.format = []byte(dateStr)
|
p.format = []byte(dateStr)
|
||||||
return &p
|
return &p
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *parser) nextIs(i int, b byte) bool {
|
||||||
|
if len(p.datestr) > i+1 && p.datestr[i+1] == b {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func (p *parser) set(start int, val string) {
|
func (p *parser) set(start int, val string) {
|
||||||
if start < 0 {
|
if start < 0 {
|
||||||
return
|
return
|
||||||
@ -1598,6 +1783,11 @@ func (p *parser) coalesceTime(end int) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
func (p *parser) setFullMonth(month string) {
|
||||||
|
if p.moi == 0 {
|
||||||
|
p.format = []byte(fmt.Sprintf("%s%s", "January", p.format[len(month):]))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (p *parser) trimExtra() {
|
func (p *parser) trimExtra() {
|
||||||
if p.extra > 0 && len(p.format) > p.extra {
|
if p.extra > 0 && len(p.format) > p.extra {
|
||||||
@ -1606,10 +1796,24 @@ func (p *parser) trimExtra() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// func (p *parser) remove(i, length int) {
|
||||||
|
// if len(p.format) > i+length {
|
||||||
|
// //append(a[:i], a[j:]...)
|
||||||
|
// p.format = append(p.format[0:i], p.format[i+length:]...)
|
||||||
|
// }
|
||||||
|
// if len(p.datestr) > i+length {
|
||||||
|
// //append(a[:i], a[j:]...)
|
||||||
|
// p.datestr = fmt.Sprintf("%s%s", p.datestr[0:i], p.datestr[i+length:])
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
func (p *parser) parse() (time.Time, error) {
|
func (p *parser) parse() (time.Time, error) {
|
||||||
if p.t != nil {
|
if p.t != nil {
|
||||||
return *p.t, nil
|
return *p.t, nil
|
||||||
}
|
}
|
||||||
|
if len(p.fullMonth) > 0 {
|
||||||
|
p.setFullMonth(p.fullMonth)
|
||||||
|
}
|
||||||
if p.skip > 0 && len(p.format) > p.skip {
|
if p.skip > 0 && len(p.format) > p.skip {
|
||||||
p.format = p.format[p.skip:]
|
p.format = p.format[p.skip:]
|
||||||
p.datestr = p.datestr[p.skip:]
|
p.datestr = p.datestr[p.skip:]
|
||||||
@ -1620,3 +1824,11 @@ func (p *parser) parse() (time.Time, error) {
|
|||||||
}
|
}
|
||||||
return time.ParseInLocation(string(p.format), p.datestr, p.loc)
|
return time.ParseInLocation(string(p.format), p.datestr, p.loc)
|
||||||
}
|
}
|
||||||
|
func isMonthFull(alpha string) bool {
|
||||||
|
for _, month := range months {
|
||||||
|
if alpha == month {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
@ -11,8 +11,8 @@ import (
|
|||||||
func TestOne(t *testing.T) {
|
func TestOne(t *testing.T) {
|
||||||
time.Local = time.UTC
|
time.Local = time.UTC
|
||||||
var ts time.Time
|
var ts time.Time
|
||||||
ts = MustParse("1 May 2013")
|
ts = MustParse("September 17, 2012, 10:10:09")
|
||||||
assert.Equal(t, "2013-05-01 00:00:00 +0000 UTC", fmt.Sprintf("%v", ts.In(time.UTC)))
|
assert.Equal(t, "2012-09-17 10:10:09 +0000 UTC", fmt.Sprintf("%v", ts.In(time.UTC)))
|
||||||
}
|
}
|
||||||
|
|
||||||
type dateTest struct {
|
type dateTest struct {
|
||||||
@ -33,6 +33,7 @@ var testInputs = []dateTest{
|
|||||||
{in: "May 8, 2009 5:57:51 PM", out: "2009-05-08 17:57:51 +0000 UTC"},
|
{in: "May 8, 2009 5:57:51 PM", out: "2009-05-08 17:57:51 +0000 UTC"},
|
||||||
{in: "May 8, 2009 5:57:1 PM", out: "2009-05-08 17:57:01 +0000 UTC"},
|
{in: "May 8, 2009 5:57:1 PM", out: "2009-05-08 17:57:01 +0000 UTC"},
|
||||||
{in: "May 8, 2009 5:7:51 PM", out: "2009-05-08 17:07:51 +0000 UTC"},
|
{in: "May 8, 2009 5:7:51 PM", out: "2009-05-08 17:07:51 +0000 UTC"},
|
||||||
|
{in: "May 8, 2009, 5:7:51 PM", out: "2009-05-08 17:07:51 +0000 UTC"},
|
||||||
{in: "7 oct 70", out: "1970-10-07 00:00:00 +0000 UTC"},
|
{in: "7 oct 70", out: "1970-10-07 00:00:00 +0000 UTC"},
|
||||||
{in: "7 oct 1970", out: "1970-10-07 00:00:00 +0000 UTC"},
|
{in: "7 oct 1970", out: "1970-10-07 00:00:00 +0000 UTC"},
|
||||||
{in: "7 May 1970", out: "1970-05-07 00:00:00 +0000 UTC"},
|
{in: "7 May 1970", out: "1970-05-07 00:00:00 +0000 UTC"},
|
||||||
@ -54,7 +55,7 @@ var testInputs = []dateTest{
|
|||||||
{in: "Thu May 08 17:57:51 CEST 2009", out: "2009-05-08 17:57:51 +0000 UTC"},
|
{in: "Thu May 08 17:57:51 CEST 2009", out: "2009-05-08 17:57:51 +0000 UTC"},
|
||||||
{in: "Thu May 08 05:05:07 PST 2009", out: "2009-05-08 05:05:07 +0000 UTC"},
|
{in: "Thu May 08 05:05:07 PST 2009", out: "2009-05-08 05:05:07 +0000 UTC"},
|
||||||
{in: "Thu May 08 5:5:7 PST 2009", out: "2009-05-08 05:05:07 +0000 UTC"},
|
{in: "Thu May 08 5:5:7 PST 2009", out: "2009-05-08 05:05:07 +0000 UTC"},
|
||||||
// ??
|
// Day Month dd time
|
||||||
{in: "Mon Aug 10 15:44:11 UTC+0000 2015", out: "2015-08-10 15:44:11 +0000 UTC"},
|
{in: "Mon Aug 10 15:44:11 UTC+0000 2015", out: "2015-08-10 15:44:11 +0000 UTC"},
|
||||||
{in: "Mon Aug 10 15:44:11 PST-0700 2015", out: "2015-08-10 22:44:11 +0000 UTC"},
|
{in: "Mon Aug 10 15:44:11 PST-0700 2015", out: "2015-08-10 22:44:11 +0000 UTC"},
|
||||||
{in: "Mon Aug 10 15:44:11 CEST+0200 2015", out: "2015-08-10 13:44:11 +0000 UTC"},
|
{in: "Mon Aug 10 15:44:11 CEST+0200 2015", out: "2015-08-10 13:44:11 +0000 UTC"},
|
||||||
@ -64,13 +65,42 @@ var testInputs = []dateTest{
|
|||||||
{in: "Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time)", out: "2015-07-03 17:04:07 +0000 UTC"},
|
{in: "Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time)", out: "2015-07-03 17:04:07 +0000 UTC"},
|
||||||
{in: "Fri Jul 3 2015 06:04:07 GMT+0100 (GMT Daylight Time)", out: "2015-07-03 05:04:07 +0000 UTC"},
|
{in: "Fri Jul 3 2015 06:04:07 GMT+0100 (GMT Daylight Time)", out: "2015-07-03 05:04:07 +0000 UTC"},
|
||||||
{in: "Fri Jul 3 2015 06:04:07 PST-0700 (Pacific Daylight Time)", out: "2015-07-03 13:04:07 +0000 UTC"},
|
{in: "Fri Jul 3 2015 06:04:07 PST-0700 (Pacific Daylight Time)", out: "2015-07-03 13:04:07 +0000 UTC"},
|
||||||
// Month dd, yyyy time
|
// Month dd, yyyy at time
|
||||||
{in: "September 17, 2012 at 5:00pm UTC-05", out: "2012-09-17 17:00:00 +0000 UTC"},
|
{in: "September 17, 2012 at 5:00pm UTC-05", out: "2012-09-17 17:00:00 +0000 UTC"},
|
||||||
{in: "September 17, 2012 at 10:09am PST-08", out: "2012-09-17 18:09:00 +0000 UTC"},
|
{in: "September 17, 2012 at 10:09am PST-08", out: "2012-09-17 18:09:00 +0000 UTC"},
|
||||||
|
{in: "September 17, 2012, 10:10:09", out: "2012-09-17 10:10:09 +0000 UTC"},
|
||||||
|
{in: "May 17, 2012 at 10:09am PST-08", out: "2012-05-17 18:09:00 +0000 UTC"},
|
||||||
|
{in: "May 17, 2012 AT 10:09am PST-08", out: "2012-05-17 18:09:00 +0000 UTC"},
|
||||||
|
// Month dd, yyyy time
|
||||||
|
{in: "September 17, 2012 5:00pm UTC-05", out: "2012-09-17 17:00:00 +0000 UTC"},
|
||||||
|
{in: "September 17, 2012 10:09am PST-08", out: "2012-09-17 18:09:00 +0000 UTC"},
|
||||||
|
{in: "September 17, 2012 09:01:00", out: "2012-09-17 09:01:00 +0000 UTC"},
|
||||||
|
// Month dd yyyy time
|
||||||
|
{in: "September 17 2012 5:00pm UTC-05", out: "2012-09-17 17:00:00 +0000 UTC"},
|
||||||
|
{in: "September 17 2012 5:00pm UTC-0500", out: "2012-09-17 17:00:00 +0000 UTC"},
|
||||||
|
{in: "September 17 2012 10:09am PST-08", out: "2012-09-17 18:09:00 +0000 UTC"},
|
||||||
|
{in: "September 17 2012 5:00PM UTC-05", out: "2012-09-17 17:00:00 +0000 UTC"},
|
||||||
|
{in: "September 17 2012 10:09AM PST-08", out: "2012-09-17 18:09:00 +0000 UTC"},
|
||||||
|
{in: "September 17 2012 09:01:00", out: "2012-09-17 09:01:00 +0000 UTC"},
|
||||||
|
{in: "May 17, 2012 10:10:09", out: "2012-05-17 10:10:09 +0000 UTC"},
|
||||||
// Month dd, yyyy
|
// Month dd, yyyy
|
||||||
{in: "September 17, 2012", out: "2012-09-17 00:00:00 +0000 UTC"},
|
{in: "September 17, 2012", out: "2012-09-17 00:00:00 +0000 UTC"},
|
||||||
{in: "May 7, 2012", out: "2012-05-07 00:00:00 +0000 UTC"},
|
{in: "May 7, 2012", out: "2012-05-07 00:00:00 +0000 UTC"},
|
||||||
{in: "June 7, 2012", out: "2012-06-07 00:00:00 +0000 UTC"},
|
{in: "June 7, 2012", out: "2012-06-07 00:00:00 +0000 UTC"},
|
||||||
|
{in: "June 7 2012", out: "2012-06-07 00:00:00 +0000 UTC"},
|
||||||
|
// Month dd[th,nd,st] yyyy
|
||||||
|
{in: "September 17th, 2012", out: "2012-09-17 00:00:00 +0000 UTC"},
|
||||||
|
{in: "September 17th 2012", out: "2012-09-17 00:00:00 +0000 UTC"},
|
||||||
|
{in: "September 7th, 2012", out: "2012-09-07 00:00:00 +0000 UTC"},
|
||||||
|
{in: "September 7th 2012", out: "2012-09-07 00:00:00 +0000 UTC"},
|
||||||
|
{in: "May 1st 2012", out: "2012-05-01 00:00:00 +0000 UTC"},
|
||||||
|
{in: "May 1st, 2012", out: "2012-05-01 00:00:00 +0000 UTC"},
|
||||||
|
{in: "May 21st 2012", out: "2012-05-21 00:00:00 +0000 UTC"},
|
||||||
|
{in: "May 21st, 2012", out: "2012-05-21 00:00:00 +0000 UTC"},
|
||||||
|
{in: "June 2nd, 2012", out: "2012-06-02 00:00:00 +0000 UTC"},
|
||||||
|
{in: "June 2nd 2012", out: "2012-06-02 00:00:00 +0000 UTC"},
|
||||||
|
{in: "June 22nd, 2012", out: "2012-06-22 00:00:00 +0000 UTC"},
|
||||||
|
{in: "June 22nd 2012", out: "2012-06-22 00:00:00 +0000 UTC"},
|
||||||
// ?
|
// ?
|
||||||
{in: "Fri, 03 Jul 2015 08:08:08 MST", out: "2015-07-03 08:08:08 +0000 UTC"},
|
{in: "Fri, 03 Jul 2015 08:08:08 MST", out: "2015-07-03 08:08:08 +0000 UTC"},
|
||||||
{in: "Fri, 03 Jul 2015 08:08:08 PST", out: "2015-07-03 15:08:08 +0000 UTC", loc: "America/Los_Angeles"},
|
{in: "Fri, 03 Jul 2015 08:08:08 PST", out: "2015-07-03 15:08:08 +0000 UTC", loc: "America/Los_Angeles"},
|
||||||
@ -341,11 +371,6 @@ var testInputs = []dateTest{
|
|||||||
{in: "1384216367111222333", out: "2013-11-12 00:32:47.111222333 +0000 UTC"},
|
{in: "1384216367111222333", out: "2013-11-12 00:32:47.111222333 +0000 UTC"},
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
{in: , out: },
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
func TestParse(t *testing.T) {
|
func TestParse(t *testing.T) {
|
||||||
|
|
||||||
// Lets ensure we are operating on UTC
|
// Lets ensure we are operating on UTC
|
||||||
@ -437,6 +462,7 @@ var testParseErrors = []dateTest{
|
|||||||
{in: "xyzq-baad"},
|
{in: "xyzq-baad"},
|
||||||
{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: "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},
|
||||||
@ -458,6 +484,7 @@ var testParseFormat = []dateTest{
|
|||||||
//
|
//
|
||||||
{in: "oct 7, 1970", out: "Jan 2, 2006"},
|
{in: "oct 7, 1970", out: "Jan 2, 2006"},
|
||||||
{in: "sept. 7, 1970", out: "Jan. 2, 2006"},
|
{in: "sept. 7, 1970", out: "Jan. 2, 2006"},
|
||||||
|
{in: "May 05, 2015, 05:05:07", out: "Jan 02, 2006, 15:04:05"},
|
||||||
// 03 February 2013
|
// 03 February 2013
|
||||||
{in: "03 February 2013", out: "02 January 2006"},
|
{in: "03 February 2013", out: "02 January 2006"},
|
||||||
// 13:31:51.999 -07:00 MST
|
// 13:31:51.999 -07:00 MST
|
||||||
|
Loading…
Reference in New Issue
Block a user