2f8e7a2c67
- Do more property testing for null values. - Add test for `AbsoluteLong`.
60 lines
1.6 KiB
Go
60 lines
1.6 KiB
Go
// Copyright 2024 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package templates
|
|
|
|
import (
|
|
"context"
|
|
"html/template"
|
|
"time"
|
|
|
|
"code.gitea.io/gitea/modules/setting"
|
|
"code.gitea.io/gitea/modules/timeutil"
|
|
)
|
|
|
|
type DateUtils struct {
|
|
ctx context.Context
|
|
}
|
|
|
|
func NewDateUtils(ctx context.Context) *DateUtils {
|
|
return &DateUtils{ctx}
|
|
}
|
|
|
|
// AbsoluteShort renders in "Jan 01, 2006" format
|
|
func (du *DateUtils) AbsoluteShort(time any) template.HTML {
|
|
return timeutil.DateTime("short", time)
|
|
}
|
|
|
|
// AbsoluteLong renders in "January 01, 2006" format
|
|
func (du *DateUtils) AbsoluteLong(time any) template.HTML {
|
|
return timeutil.DateTime("long", time)
|
|
}
|
|
|
|
// FullTime renders in "Jan 01, 2006 20:33:44" format
|
|
func (du *DateUtils) FullTime(time any) template.HTML {
|
|
return timeutil.DateTime("full", time)
|
|
}
|
|
|
|
// ParseLegacy parses the datetime in legacy format, eg: "2016-01-02" in server's timezone.
|
|
// It shouldn't be used in new code. New code should use Time or TimeStamp as much as possible.
|
|
func (du *DateUtils) ParseLegacy(datetime string) time.Time {
|
|
return parseLegacy(datetime)
|
|
}
|
|
|
|
func parseLegacy(datetime string) time.Time {
|
|
t, err := time.Parse(time.RFC3339, datetime)
|
|
if err != nil {
|
|
t, _ = time.ParseInLocation(time.DateOnly, datetime, setting.DefaultUILocation)
|
|
}
|
|
return t
|
|
}
|
|
|
|
func dateTimeLegacy(format string, datetime any, _ ...string) template.HTML {
|
|
if !setting.IsProd || setting.IsInTesting {
|
|
panic("dateTimeLegacy is for backward compatibility only, do not use it in new code")
|
|
}
|
|
if s, ok := datetime.(string); ok {
|
|
datetime = parseLegacy(s)
|
|
}
|
|
return timeutil.DateTime(format, datetime)
|
|
}
|