Как отформатировать поле даты в шаблоне листа с помощью Vapor 4

#vapor #leaf

#vapor #лист

Вопрос:

В списке я хочу показать даты, полученные из базы данных. Если я использую:

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

Я ожидал бы: Ср, 30/12/2020, НО я получаю Ср, 30/12/2020, что я нахожу очень странным, поскольку я специально прошу dd-MM

Затем я попытался:

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

с работает нормально и предоставляет мне: Ср., 30/12/2020

Тем не менее, я все еще недоволен…

  1. Я хочу, чтобы оно было представлено с помощью — вместо / : Ср, 30-12-2020

и

  1. Поскольку мое приложение будет локализовано, я хотел бы иметь контроль над отображением дня: Wed (англ.), Mer (французский), Woe (голландский) итак, как мне установить, какой язык следует использовать в Leaf? (Я знаю, как это сделать в Vapor, но я бы предпочел оставить это на усмотрение Leaf, если это возможно.)

Комментарии:

1. Я использую Leaf Tau

2. Вероятно, вам понадобится пользовательский тег, чтобы заставить его работать так, как вы хотите

3. Хорошо, спасибо 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")