mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-11-04 00:11:04 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			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)
 | 
						|
}
 |