Add parseRelativeTime function

This commit is contained in:
Svilen Markov 2025-03-20 23:49:09 +00:00
parent bca3617116
commit f1f0158238

View File

@ -316,28 +316,12 @@ var customAPITemplateFuncs = func() template.FuncMap {
return a / b return a / b
}, },
"parseTime": func(layout, value string) time.Time { "parseTime": customAPIFuncParseTime,
switch strings.ToLower(layout) {
case "rfc3339":
layout = time.RFC3339
case "rfc3339nano":
layout = time.RFC3339Nano
case "datetime":
layout = time.DateTime
case "dateonly":
layout = time.DateOnly
case "timeonly":
layout = time.TimeOnly
}
parsed, err := time.Parse(layout, value)
if err != nil {
return time.Unix(0, 0)
}
return parsed
},
"toRelativeTime": dynamicRelativeTimeAttrs, "toRelativeTime": dynamicRelativeTimeAttrs,
"parseRelativeTime": func(layout, value string) template.HTMLAttr {
// Shorthand to do both of the above with a single function call
return dynamicRelativeTimeAttrs(customAPIFuncParseTime(layout, value))
},
} }
for key, value := range globalTemplateFunctions { for key, value := range globalTemplateFunctions {
@ -348,3 +332,25 @@ var customAPITemplateFuncs = func() template.FuncMap {
return funcs return funcs
}() }()
func customAPIFuncParseTime(layout, value string) time.Time {
switch strings.ToLower(layout) {
case "rfc3339":
layout = time.RFC3339
case "rfc3339nano":
layout = time.RFC3339Nano
case "datetime":
layout = time.DateTime
case "dateonly":
layout = time.DateOnly
case "timeonly":
layout = time.TimeOnly
}
parsed, err := time.Parse(layout, value)
if err != nil {
return time.Unix(0, 0)
}
return parsed
}