从 ISO 日期中删除时间以使用 Vapor Swift 进行过滤

Remove time from ISO date to filter with Vapor Swift

我正在研究如何过滤 ISO 日期。我想过滤掉特定日期的待办事项。

日期是这样保存在数据库中的:

"started" -> 2022-03-17 18:46:44+00

我想像这样过滤“开始”

2022-03-17

这是我的查询。我想不出从日期中删除时间的方法。

func indexTodosByDate(req: Request) throws -> EventLoopFuture<[Todo]> {
    guard let dateFilter = req.parameters.get("date", as: Date.self) else {
        throw Abort(.badRequest)
    }   
    return Todo.query(on: req.db)
        .filter(\.$started == dateFilter)
        .with(\.$user)
        .all()
}

如果您使用的是标准日期格式并且它在迁移中使用 datetime 作为字段类型,则不能。

您需要做的是编写一个查询,搜索日期大于或等于 00:00 且小于或等于 23:59 的日期等。开始计算当天和一天结束并将其传递给您的过滤器。 Swift 的 Calendar API 具有开始一天的功能

虽然@0xTim 已经确定了正确的方法,但我希望这会为您提供必要的代码来实现您的目标。

首先,扩展 Date 为您提供相关日期的午夜:

extension Date {
    var midnight: Date { return Calendar.current.date(bySettingHour: 0, minute: 0, second: 0, of: self)! }
}

然后,在查询的过滤器中使用它:

let query = ToDo(on: database).filter(\.$started >= dateFilter.midnight)