Формат ISO8601 различается в MongoDB и iOS - PullRequest
1 голос
/ 26 мая 2019

Я хочу опубликовать Date в формате IOS8601 с iOS на NodeJS (mongoDB) и перейти с NodeJS на iOS.

Но формат даты отличается от обеих платформ.

Сторона iOS: 2019-05-26T17: 10: 10Z сторона mongoDB: 2019-05-26T17: 10: 10.000Z

, что означает отправку примера с датой в mongoDB, затем дату возвращают с дополнительным .000.

Для iOS :

extension Date {
  var ISO8601String: String? {
      let formatter = ISO8601DateFormatter()
      return formatter.string(from: self)
  }
}

Вывод строки ISO8601: ГГГГ-ММ-ддЧЧ: мм: ссЗ

Для mongoDB

Схема:

var FooSchema = Schema({

    date: {
      type: Date,
      required: true
    }
})

Использование:

let date = new Date(req.body.date) // I also used req.body.date directlly
new Foo(date: date)

На iOS получить ISO8601 date было добавлено .000. что yyyy-MM-dd'T'HH:mm:ss.SSS'Z'

Вот ссылка на документ : enter image description here

Нужно ли конвертировать хотя бы с одной стороны?

1 Ответ

1 голос
/ 27 мая 2019

В iOS вы можете сгенерировать средство форматирования, которое включает в себя миллисекунды в iOS 11 и более поздних версиях:

let formatter = ISO8601DateFormatter()
formatter.formatOptions.insert(.withFractionalSeconds)

Если вам нужно сделать это с версиями iOS до этого, вы должны использовать DateFormatter:

let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSX"
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.timeZone = TimeZone(secondsFromGMT: 0)
...