Отправка даты из Swift в Vapor 3

#swift #vapor

#swift #vapor

Вопрос:

У меня возникли проблемы с отправкой даты в Vapor 3 из Swift 5, iOS. Вот ошибка, которую я получаю от Vapor:

 POST /admin/test Expected date string to be ISO8601-formatted.

 

Вот как я создаю дату в iOS

 let today = Date()
        let f = ISO8601DateFormatter()
        f.formatOptions.insert(.withFractionalSeconds)
        let finalDate = f.string(from: today)
 

Вот моя модель транзакций в iOS

 final class Transaction: Codable, ReflectedStringConvertible {
        
    var id: Int?
    var date: String
    var amount: Int
    var planeID: Int
    var userID: UUID
    var month: Int
    var year: Int

    init(date: String, amount: Int, planeID: Int, userID: UUID, month: Int, year: Int) {
        self.date = date
        self.amount = amount
        self.planeID = planeID
        self.userID = userID
        self.month = month
        self.year = year
    }
}
 

Вот мой vapor API

 
func createHandler (_ req: Request, transaction: Transaction) throws -> Future<Transaction> {
           return transaction.save(on: req)
       }

 

Вот моя модель транзакции на стороне vapor

 
final class Transaction: Codable {
    
    var id: Int?
    var date: Date
    var amount: Int
    var planeID: Plane.ID
    var userID: User.ID
    var month: Int
    var year: Int
    //fixes Swift 5 bug
    typealias Database = PostgreSQLDatabase

    
    init(date: Date, amount: Int, planeID: Plane.ID, userID: User.ID, month: Int = 0, year: Int = 0) {
        self.date = date
        self.amount = amount
        self.planeID = planeID
        self.userID = userID
        self.month = month
        self.year = year
    }
}

 

Есть идеи, что я делаю не так? Это потому, что я отправляю строку для даты вместо даты? Большое спасибо.

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

1. попробуйте без доли секунды

2. Спасибо. Я думал, что пробовал это, но теперь это работает. Спасибо!

Ответ №1:

Ответ заключался в том, чтобы удалить fractionalSeconds

 let today = Date()
let f = ISO8601DateFormatter()
let finalDate = f.string(from: today)