package matching import ( "fmt" "strings" "time" ) var sheetsEpoch = time.Date(1899, 12, 30, 0, 0, 0, 0, time.UTC) // FormatDate normalizes a date value from Google Sheets. // // Accepts nil, empty string, int/float64 Sheets serial days since 1899-12-30, // a pre-formatted "YYYY-MM-DD" string (returned as-is), or any other value // (returned as fmt.Sprint(v).TrimSpace). Never returns an error. // // Ports scripts/match_payments.py format_date. func FormatDate(val any) string { if val == nil { return "" } switch v := val.(type) { case int: return sheetsEpoch.Add(time.Duration(float64(v) * 24 * float64(time.Hour))).Format("2006-01-02") case int64: return sheetsEpoch.Add(time.Duration(float64(v) * 24 * float64(time.Hour))).Format("2006-01-02") case float64: return sheetsEpoch.Add(time.Duration(v * 24 * float64(time.Hour))).Format("2006-01-02") case string: s := strings.TrimSpace(v) if s == "" { return "" } if len(s) == 10 && s[4] == '-' && s[7] == '-' { return s } return s default: return strings.TrimSpace(fmt.Sprint(v)) } }