@@ -90,6 +90,9 @@ const (
9090 dateAlphaWsAlpha
9191 dateAlphaWsAlphaYearmaybe // 34
9292 dateAlphaPeriodWsDigit
93+ dateAlphaSlash
94+ dateAlphaSlashDigit
95+ dateAlphaSlashDigitSlash
9396 dateWeekdayComma
9497 dateWeekdayAbbrevComma
9598)
@@ -855,6 +858,14 @@ iterRunes:
855858 //
856859 // dateAlphaPeriodWsDigit
857860 // oct. 1, 1970
861+ // dateAlphaSlash
862+ // dateAlphaSlashDigit
863+ // dateAlphaSlashDigitSlash
864+ // Oct/ 7/1970
865+ // Oct/07/1970
866+ // February/ 7/1970
867+ // February/07/1970
868+ //
858869 // dateWeekdayComma
859870 // Monday, 02 Jan 2006 15:04:05 MST
860871 // Monday, 02-Jan-06 15:04:05 MST
@@ -937,6 +948,30 @@ iterRunes:
937948 } else {
938949 return p , unknownErr (datestr )
939950 }
951+ case r == '/' :
952+ // X
953+ // Oct/ 7/1970
954+ // Oct/07/1970
955+ // X
956+ // February/ 7/1970
957+ // February/07/1970
958+ // Must be a valid short or long month
959+ if i == 3 {
960+ p .moi = 0
961+ p .molen = i - p .moi
962+ p .set (p .moi , "Jan" )
963+ p .stateDate = dateAlphaSlash
964+ } else {
965+ possibleFullMonth := strings .ToLower (p .datestr [:i ])
966+ if i > 3 && isMonthFull (possibleFullMonth ) {
967+ p .moi = 0
968+ p .molen = i - p .moi
969+ p .fullMonth = possibleFullMonth
970+ p .stateDate = dateAlphaSlash
971+ } else {
972+ return p , unknownErr (datestr )
973+ }
974+ }
940975 }
941976
942977 case dateAlphaWs :
@@ -1183,6 +1218,53 @@ iterRunes:
11831218 default :
11841219 return p , unknownErr (datestr )
11851220 }
1221+
1222+ case dateAlphaSlash :
1223+ // Oct/ 7/1970
1224+ // February/07/1970
1225+ switch {
1226+ case r == ' ' :
1227+ // continue
1228+ case unicode .IsDigit (r ):
1229+ p .stateDate = dateAlphaSlashDigit
1230+ p .dayi = i
1231+ default :
1232+ return p , unknownErr (datestr )
1233+ }
1234+
1235+ case dateAlphaSlashDigit :
1236+ // dateAlphaSlash:
1237+ // dateAlphaSlashDigit:
1238+ // dateAlphaSlashDigitSlash:
1239+ // Oct/ 7/1970
1240+ // Oct/07/1970
1241+ // February/ 7/1970
1242+ // February/07/1970
1243+ switch {
1244+ case r == '/' :
1245+ p .yeari = i + 1
1246+ p .daylen = i - p .dayi
1247+ if ! p .setDay () {
1248+ return p , unknownErr (datestr )
1249+ }
1250+ p .stateDate = dateAlphaSlashDigitSlash
1251+ case unicode .IsDigit (r ):
1252+ // continue
1253+ default :
1254+ return p , unknownErr (datestr )
1255+ }
1256+
1257+ case dateAlphaSlashDigitSlash :
1258+ switch {
1259+ case unicode .IsDigit (r ):
1260+ // continue
1261+ case r == ' ' :
1262+ p .stateTime = timeStart
1263+ break iterRunes
1264+ default :
1265+ return p , unknownErr (datestr )
1266+ }
1267+
11861268 case dateWeekdayComma :
11871269 // Monday, 02 Jan 2006 15:04:05 MST
11881270 // Monday, 02 Jan 2006 15:04:05 -0700
@@ -2044,6 +2126,11 @@ iterRunes:
20442126 p .setEntireFormat ([]byte ("2006年01月02日 15:04:05" ))
20452127 return p , nil
20462128
2129+ case dateAlphaSlashDigitSlash :
2130+ // Oct/ 7/1970
2131+ // February/07/1970
2132+ return p , nil
2133+
20472134 case dateWeekdayComma :
20482135 // Monday, 02 Jan 2006 15:04:05 -0700
20492136 // Monday, 02 Jan 2006 15:04:05 +0100
@@ -2381,6 +2468,9 @@ func isDay(alpha string) bool {
23812468 return false
23822469}
23832470func isMonthFull (alpha string ) bool {
2471+ if len (alpha ) > len ("september" ) {
2472+ return false
2473+ }
23842474 for _ , month := range months {
23852475 if alpha == month {
23862476 return true
0 commit comments