@@ -93,6 +93,8 @@ const (
9393 dateAlphaPeriodWsDigit
9494 dateWeekdayComma
9595 dateWeekdayAbbrevComma
96+ dateDigitDashDigit
97+ dateDigitDashDigitDash
9698)
9799const (
98100 // Time state
@@ -499,6 +501,9 @@ iterRunes:
499501 if unicode .IsLetter (r ) {
500502 p .stateDate = dateDigitDashAlpha
501503 p .moi = i
504+ } else if unicode .IsDigit (r ) {
505+ p .stateDate = dateDigitDashDigit
506+ p .moi = i
502507 } else {
503508 return nil , unknownErr (datestr )
504509 }
@@ -513,7 +518,15 @@ iterRunes:
513518 p .yeari = i + 1
514519 p .stateDate = dateDigitDashAlphaDash
515520 }
516-
521+ case dateDigitDashDigit :
522+ // 29-06-2026
523+ switch r {
524+ case '-' :
525+ p .molen = i - p .moi
526+ p .set (p .moi , "01" )
527+ p .yeari = i + 1
528+ p .stateDate = dateDigitDashDigitDash
529+ }
517530 case dateDigitDashAlphaDash :
518531 // 13-Feb-03 ambiguous
519532 // 28-Feb-03 ambiguous
@@ -546,6 +559,36 @@ iterRunes:
546559 p .stateTime = timeStart
547560 break iterRunes
548561 }
562+ case dateDigitDashDigitDash :
563+ // 29-06-2026
564+ switch r {
565+ case ' ' :
566+ // we need to find if this was 4 digits, aka year
567+ // or 2 digits which makes it ambiguous year/day
568+ length := i - (p .moi + p .molen + 1 )
569+ if length == 4 {
570+ p .yearlen = 4
571+ p .set (p .yeari , "2006" )
572+ // We now also know that part1 was the day
573+ p .dayi = 0
574+ p .daylen = p .part1Len
575+ p .setDay ()
576+ } else if length == 2 {
577+ // We have no idea if this is
578+ // yy-mon-dd OR dd-mon-yy
579+ //
580+ // We are going to ASSUME (bad, bad) that it is dd-mon-yy which is a horible assumption
581+ p .ambiguousMD = true
582+ p .yearlen = 2
583+ p .set (p .yeari , "06" )
584+ // We now also know that part1 was the day
585+ p .dayi = 0
586+ p .daylen = p .part1Len
587+ p .setDay ()
588+ }
589+ p .stateTime = timeStart
590+ break iterRunes
591+ }
549592
550593 case dateDigitYearSlash :
551594 // 2014/07/10 06:55:38.156283
@@ -1860,7 +1903,33 @@ iterRunes:
18601903 }
18611904
18621905 return p , nil
1906+ case dateDigitDashDigitDash :
1907+ // 13-02-03 ambiguous
1908+ // 28-02-03 ambiguous
1909+ // 29-06-2016
1910+ length := len (datestr ) - (p .moi + p .molen + 1 )
1911+ if length == 4 {
1912+ p .yearlen = 4
1913+ p .set (p .yeari , "2006" )
1914+ // We now also know that part1 was the day
1915+ p .dayi = 0
1916+ p .daylen = p .part1Len
1917+ p .setDay ()
1918+ } else if length == 2 {
1919+ // We have no idea if this is
1920+ // yy-mon-dd OR dd-mon-yy
1921+ //
1922+ // We are going to ASSUME (bad, bad) that it is dd-mon-yy which is a horible assumption
1923+ p .ambiguousMD = true
1924+ p .yearlen = 2
1925+ p .set (p .yeari , "06" )
1926+ // We now also know that part1 was the day
1927+ p .dayi = 0
1928+ p .daylen = p .part1Len
1929+ p .setDay ()
1930+ }
18631931
1932+ return p , nil
18641933 case dateDigitDot :
18651934 // 2014.05
18661935 p .molen = i - p .moi
0 commit comments