-
-
Notifications
You must be signed in to change notification settings - Fork 1.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add a template function about date #9815
Conversation
添加一个与日期相关的模板函数,有「星期天」了
我觉得也许可以不用增加一个函数,给原来的函数添加一个参数。我改了一下原始的代码: func WeekdayCN(args ...interface{}) string {
weekdayCN := []string{"日", "一", "二", "三", "四", "五", "六"}
var week int
// 判断参数数量和类型
switch len(args) {
case 1:
//单个参数,类型应该为 time.Time
if t, ok := args[0].(time.Time); ok {
week = Weekday(t)
}
case 2:
// 两个参数,第一个为 string,第二个为 time.Time
if dayStr, ok := args[0].(string); ok {
weekdayCN[0] = dayStr
if t, ok := args[1].(time.Time); ok {
week = Weekday(t)
}
}
default:
// 多于一个参数,忽略
}
return weekdayCN[week]
} 现在 我在 playground 测试了一下,貌似可行 package main
import (
"html/template"
"log"
"os"
"time"
)
func LastSunday() time.Time {
now := time.Now()
daysSinceSunday := int(now.Weekday())
if daysSinceSunday != 0 {
daysAgo := (daysSinceSunday + 7) % 7
lastSunday := now.AddDate(0, 0, -daysAgo)
return lastSunday
}
return now
}
func main() {
// 创建一个新的模板
tmpl := template.New("example")
// 注册自定义函数
tmpl.Funcs(template.FuncMap{
"WeekdayCN": WeekdayCN,
//"now": time.Now,
"now": LastSunday,
})
// 解析模板内容
tmpl, err := tmpl.Parse(" {{now}}: 星期({{WeekdayCN now}}) 星期({{ now | WeekdayCN }}) 星期({{ WeekdayCN \"哈哈\" now}}) 星期({{ now | WeekdayCN \"日\"}}) ")
if err != nil {
log.Fatal(err)
}
// 获取当前时间
now := LastSunday()
// 执行模板
err = tmpl.Execute(os.Stdout, now)
if err != nil {
log.Fatal(err)
}
}
func Weekday(date time.Time) int {
return int(date.Weekday())
}
func WeekdayCN(args ...interface{}) string {
weekdayCN := []string{"日", "一", "二", "三", "四", "五", "六"}
var week int
// 判断参数数量和类型
switch len(args) {
case 1:
//单个参数,类型应该为 time.Time
if t, ok := args[0].(time.Time); ok {
week = Weekday(t)
}
case 2:
// 两个参数,第一个为 string,第二个为 time.Time
if dayStr, ok := args[0].(string); ok {
weekdayCN[0] = dayStr
if t, ok := args[1].(time.Time); ok {
week = Weekday(t)
}
}
default:
// 其他情况,忽略
}
return weekdayCN[week]
} |
突然想到还有:「礼拜“一”」这种形式,感觉是不是可以再改一下 |
礼拜这种字就不是放在模板里的了,而是放在外面了
|
感觉你这个挺合理的,就是不知道除了「周日」和「星期天」以外还能有什么。 刚才突然脑抽了,说了个完全对不上想法的例子😓,其实我本来想说的是可能有人既不用「周“一”」也不用「星期“一”」,既然现在可以用任意字符替换「日」,或许可以在这个基础上提供更高的自定义——不只是替换「日」,「一」到「六」也可以替换为其他的字符。 |
其实想要自定义完全可以用 |
添加一个日期相关的模板函数
这个暂时不考虑合并了,还是下标配合外部文本比较好吧。 |
感觉还是加上这个比较简单方便 |
补充一个日期相关的模板函数
增加「星期“天”」
关联: