func ParseIn(datestr string, loc *time.Location) (time.Time, error) {
	p, err := parseTime(datestr, loc)
	if err != nil {
		return time.Time{}, err
	}
	return p.parse()
}
ParseIn with Location, equivalent to time.ParseInLocation() timezone/offset
rules.  Using location arg, if timezone/offset info exists in the
datestring, it uses the given location rules for any zone interpretation.
That is, MST means one thing when using America/Denver and something else
in other locations.
package dateparse
import (
	"fmt"
	"strconv"
	"strings"
	"time"
	"unicode"
	"unicode/utf8"
)
var months = []string{
	"january",
	"february",
	"march",
	"april",
	"may",
	"june",
	"july",
	"august",
	"september",
	"october",
	"november",
	"december",
}
type dateState uint8
type timeState uint8
const (
	dateStart dateState = iota  
	dateDigit
	dateYearDash
	dateYearDashAlphaDash
	dateYearDashDash
	dateYearDashDashWs  
	dateYearDashDashT
	dateDigitDash
	dateDigitDashAlpha
	dateDigitDashAlphaDash
	dateDigitDot  
	dateDigitDotDot
	dateDigitSlash
	dateDigitChineseYear
	dateDigitChineseYearWs
	dateDigitWs  
	dateDigitWsMoYear
	dateDigitWsMolong
	dateAlpha
	dateAlphaWs
	dateAlphaWsDigit  
	dateAlphaWsDigitMore
	dateAlphaWsDigitMoreWs
	dateAlphaWsDigitMoreWsYear
	dateAlphaWsMonth
	dateAlphaWsMonthMore
	dateAlphaWsMonthSuffix
	dateAlphaWsMore
	dateAlphaWsAtTime
	dateAlphaWsAlpha
	dateAlphaWsAlphaYearmaybe
	dateAlphaPeriodWsDigit
	dateWeekdayComma
	dateWeekdayAbbrevComma
)
const (
	timeIgnore timeState = iota  
	timeStart
	timeWs
	timeWsAlpha
	timeWsAlphaWs
	timeWsAlphaZoneOffset  
	timeWsAlphaZoneOffsetWs
	timeWsAlphaZoneOffsetWsYear
	timeWsAlphaZoneOffsetWsExtra
	timeWsAMPMMaybe
	timeWsAMPM  
	timeWsOffset
	timeWsOffsetWs  
	timeWsOffsetColonAlpha
	timeWsOffsetColon
	timeWsYear  
	timeOffset
	timeOffsetColon
	timeAlpha
	timePeriod
	timePeriodOffset  
	timePeriodOffsetColon
	timePeriodOffsetColonWs
	timePeriodWs
	timePeriodWsAlpha
	timePeriodWsOffset  
	timePeriodWsOffsetWs
	timePeriodWsOffsetWsAlpha
	timePeriodWsOffsetColon
	timePeriodWsOffsetColonAlpha
	timeZ
	timeZDigit
)
var (
	ErrAmbiguousMMDD = fmt.Errorf("This date has ambiguous mm/dd vs dd/mm type format")
)
func unknownErr(datestr string) error {
	return fmt.Errorf("Could not find format for %q", datestr)
}
func ParseAny(datestr string) (time.Time, error) {
	p, err := parseTime(datestr, nil)
	if err != nil {
		return time.Time{}, err
	}
	return p.parse()
}