github.com/System-Glitch/goyave/v2@v2.10.3-0.20200819142921-51011e75d504/validation/dates.go (about) 1 package validation 2 3 import ( 4 "fmt" 5 "time" 6 ) 7 8 func parseDate(date interface{}, format string) (time.Time, error) { 9 str, ok := date.(string) 10 if ok { 11 t, err := time.Parse(format, str) 12 if err == nil { 13 return t, err 14 } 15 return t, err 16 } 17 return time.Time{}, fmt.Errorf("Date is not a string so cannot be parsed") 18 } 19 20 func getDates(value interface{}, parameters []string, form map[string]interface{}) ([]time.Time, error) { 21 dates := []time.Time{} 22 date, ok := value.(time.Time) 23 if ok { 24 dates = append(dates, date) 25 for _, param := range parameters { 26 other, exists := form[param] 27 if exists { 28 otherDate, ok := other.(time.Time) 29 if !ok { 30 t, err := parseDate(other, "2006-01-02") 31 if err != nil { 32 return dates, fmt.Errorf("Cannot parse date in other field") 33 } 34 otherDate = t 35 } 36 dates = append(dates, otherDate) 37 continue 38 } 39 40 t, err := parseDate(param, "2006-01-02T15:04:05") 41 if err != nil { 42 panic(err) 43 } 44 dates = append(dates, t) 45 } 46 47 return dates, nil 48 } 49 return dates, fmt.Errorf("Value is not a date") 50 } 51 52 func validateDate(field string, value interface{}, parameters []string, form map[string]interface{}) bool { 53 if len(parameters) == 0 { 54 parameters = append(parameters, "2006-01-02") 55 } 56 57 t, err := parseDate(value, parameters[0]) 58 if err == nil { 59 form[field] = t 60 return true 61 } 62 return false 63 } 64 65 func validateBefore(field string, value interface{}, parameters []string, form map[string]interface{}) bool { 66 dates, err := getDates(value, parameters, form) 67 return err == nil && dates[0].Before(dates[1]) 68 } 69 70 func validateBeforeEqual(field string, value interface{}, parameters []string, form map[string]interface{}) bool { 71 dates, err := getDates(value, parameters, form) 72 return err == nil && (dates[0].Before(dates[1]) || dates[0].Equal(dates[1])) 73 } 74 75 func validateAfter(field string, value interface{}, parameters []string, form map[string]interface{}) bool { 76 dates, err := getDates(value, parameters, form) 77 return err == nil && dates[0].After(dates[1]) 78 } 79 80 func validateAfterEqual(field string, value interface{}, parameters []string, form map[string]interface{}) bool { 81 dates, err := getDates(value, parameters, form) 82 return err == nil && (dates[0].After(dates[1]) || dates[0].Equal(dates[1])) 83 } 84 85 func validateDateEquals(field string, value interface{}, parameters []string, form map[string]interface{}) bool { 86 dates, err := getDates(value, parameters, form) 87 return err == nil && dates[0].Equal(dates[1]) 88 } 89 90 func validateDateBetween(field string, value interface{}, parameters []string, form map[string]interface{}) bool { 91 dates, err := getDates(value, parameters, form) 92 return err == nil && (dates[0].After(dates[1]) || dates[0].Equal(dates[1])) && (dates[0].Before(dates[2]) || dates[0].Equal(dates[2])) 93 }