From 3d7605591e9f454080658d0dd33b813ad325774f Mon Sep 17 00:00:00 2001 From: kolaente Date: Thu, 10 Nov 2022 16:39:44 +0100 Subject: [PATCH] fix(filters): try to parse date filter fields of the provided dates are not valid iso dates Resolves https://community.vikunja.io/t/due-date-saved-filter-doesnt-seem-to-work/966/12 --- pkg/models/task_collection_filter.go | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/pkg/models/task_collection_filter.go b/pkg/models/task_collection_filter.go index dbd928252..4b0d6514a 100644 --- a/pkg/models/task_collection_filter.go +++ b/pkg/models/task_collection_filter.go @@ -24,6 +24,7 @@ import ( "time" "code.vikunja.io/api/pkg/config" + "github.com/iancoleman/strcase" "github.com/vectordotdev/go-datemath" "xorm.io/xorm/schemas" @@ -44,6 +45,9 @@ const ( taskFilterComparatorIn taskFilterComparator = "in" ) +// Guess what you get back if you ask Safari for a rfc 3339 formatted date? +const safariDate = "2006-01-02 15:04" + type taskFilter struct { field string value interface{} // Needs to be an interface to be able to hold the field's native value @@ -51,6 +55,14 @@ type taskFilter struct { isNumeric bool } +func parseTimeFromUserInput(timeString string) (value time.Time, err error) { + value, err = time.Parse(time.RFC3339, timeString) + if err != nil { + value, err = time.Parse(safariDate, timeString) + } + return value.In(config.GetTimeZone()), err +} + func getTaskFiltersByCollections(c *TaskCollection) (filters []*taskFilter, err error) { if len(c.FilterByArr) > 0 { @@ -170,8 +182,7 @@ func getValueForField(field reflect.StructField, rawValue string) (value interfa if err == nil { value = t.Time(datemath.WithLocation(config.GetTimeZone())) } else { - value, err = time.Parse(time.RFC3339, rawValue) - value = value.(time.Time).In(config.GetTimeZone()) + value, err = parseTimeFromUserInput(rawValue) } } case reflect.Slice: