如何使用 Vapor 4 在 Leaf 模板中格式化日期字段

Posted

技术标签:

【中文标题】如何使用 Vapor 4 在 Leaf 模板中格式化日期字段【英文标题】:How to format a date field in a Leaf template using Vapor 4 【发布时间】:2021-01-03 10:05:03 【问题描述】:

在一个列表中,我想显示从数据库中获取的日期。如果我使用:

#Date(timeStamp: appointment.appointmentDate,localizedFormat: "E, dd-MM-yyyy")

我预计:星期三,30/12/2020 但我得到了星期三,12/30/2020,我觉得很奇怪,因为我特别要求 dd-MM

然后我尝试了:

#Date(timeStamp: appointment.appointmentDate,fixedFormat: "E, dd-MM-yyyy")

工作正常并为我提供:2020 年 12 月 30 日,星期三

但是,我还是不开心……

    我想用 - 而不是 / 呈现它:星期三,2020 年 12 月 30 日

    由于我的应用程序将被本地化,我希望能够控制显示日期的方式:Wed(英语)、Mer(法语)、Woe(荷兰语),那么如何设置应在 Leaf 中使用的语言环境? (我知道如何在 Vapor 中做到这一点,但如果可能的话,我宁愿把它留给 Leaf。)

【问题讨论】:

我正在使用 Leaf Tau 你可能需要一个自定义标签来让它按照你想要的方式工作 好的,谢谢 0xTim,会做一个 【参考方案1】:

创建叶子方法:

import Foundation
import Leaf

public struct DataLeafFunction: LeafFunction, StringReturn, Invariant 

    public static var callSignature: [LeafCallParameter]  [
        .double,
        .string(labeled: nil, optional: true, defaultValue: "yyyy-MM-dd")
    ] 

    public func evaluate(_ params: LeafCallValues) -> LeafData 
        guard let timestamp = params[0].double else  return .string(params[0].string) 

        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = params[1].string
        let date = Date(timeIntervalSinceReferenceDate: timestamp)

        return .string(dateFormatter.string(from: date))
    

添加功能配置:

func configure(_ app: Application) throws 
     LeafEngine.entities.use(DataLeafFunction(), asFunction: "date")
     // ...

在您的模板中使用此功能:

#date(date) 
#date(date, "YY/MM/dd")

【讨论】:

以上是关于如何使用 Vapor 4 在 Leaf 模板中格式化日期字段的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 POST/form 叶模板传递数据?

swift [Vapor 3.0模型模板] #vapor3

Vapor 3 Swift 4 如何制作计时器

在 Vapor 4 中使用 Fluent 进行复杂查询

需要 ID 属性名称的 Vapor 4 关系和模型

EJS模板引擎