@@ -6,7 +6,9 @@ package templates
66import (
77 "context"
88 "html/template"
9+ "time"
910
11+ "code.gitea.io/gitea/modules/setting"
1012 "code.gitea.io/gitea/modules/timeutil"
1113)
1214
@@ -32,3 +34,27 @@ func (du *DateUtils) AbsoluteLong(time any) template.HTML {
3234func (du * DateUtils ) FullTime (time any ) template.HTML {
3335 return timeutil .DateTime ("full" , time )
3436}
37+
38+ // ParseLegacy parses the datetime in legacy format, eg: "2016-01-02" in server's timezone.
39+ // It shouldn't be used in new code. New code should use Time or TimeStamp as much as possible.
40+ func (du * DateUtils ) ParseLegacy (datetime string ) time.Time {
41+ return parseLegacy (datetime )
42+ }
43+
44+ func parseLegacy (datetime string ) time.Time {
45+ t , err := time .Parse (time .RFC3339 , datetime )
46+ if err != nil {
47+ t , _ = time .ParseInLocation (time .DateOnly , datetime , time .Local )
48+ }
49+ return t
50+ }
51+
52+ func dateTimeLegacy (format string , datetime any , extraAttrs ... string ) template.HTML {
53+ if ! setting .IsProd || setting .IsInTesting {
54+ panic ("dateTimeLegacy is for backward compatibility only, do not use it in new code" )
55+ }
56+ if s , ok := datetime .(string ); ok {
57+ datetime = parseLegacy (s )
58+ }
59+ return timeutil .DateTime (format , datetime , extraAttrs ... )
60+ }
0 commit comments