【问题标题】:Save specific date and times to Firestore database using the timestamp feature - Swift 4使用时间戳功能将特定日期和时间保存到 Firestore 数据库 - Swift 4
【发布时间】:2018-09-12 20:27:59
【问题描述】:

如何在 swift 4 中创建一个不是当前日期的日期对象?例如,2019 年 12 月 3 日下午 2:35。那么,如何将该对象作为时间戳写入 Firestore 数据库中的文档?

【问题讨论】:

  • 所以你只是在问如何用某些日期组件初始化一个 Date 对象?
  • 或者,如果您已经有其他日期类型对象可以使用,您是在询问如何将时间戳类型的字段写入文档?
  • 两个方面。我不确定如何在 swift 中初始化作为未来特定日期和时间的日期字段,或者如何将所述对象写入数据库中特定文档中的时间戳字段。很抱歉造成混乱,我已编辑我的问题以使其更清楚!

标签: ios swift firebase date google-cloud-firestore


【解决方案1】:

您可以创建一个 DateFormatter 对象来将本地 Date 对象来回转换为字符串,并将您的日期指定为字符串,但我不建议这样做。

看看Calendar 类和DateComponents 类。带有签名的Calendar 函数

func date(from components: DateComponents) -> Date?

允许您使用DateComponents 对象来创建日期。

所以你可能会使用这样的代码:

let calendar = Calendar.current
let components = DateComponents(
  calendar: calendar,
  year: 2019, 
  month: 12, 
  day: 3, 
  hour: 14, 
  minute: 39)

if let date = calendar.date(from: components) {
    print(DateFormatter.localizedString(
        from: date, 
        dateStyle: .medium, 
        timeStyle: .medium))
}

那会输出

Dec 3, 2019 at 2:39:00 PM

【讨论】:

  • 谢谢!您的解决方案效果很好,但我将如何将其发送到 Firestore?为什么你建议不要使用DateFormatter?很抱歉造成误解,我对编码很陌生。
  • 我之前没有使用过 FireStore。快速搜索发现:stackoverflow.com/questions/51008044/…
  • DateFormatters 将日期从/转换为字符串,这是脆弱的。例如,如果您在不同区域设置的设备上运行应用程序,日期格式的解释会发生变化,并且可能会破坏您对日期字符串的处理。 (您可以强制使用语言环境,但这是额外的步骤)
  • 当我收到从数据库返回的日期时,我将其转换为 Date 对象。在这种情况下使用DateFormatter拉出特定组件是否仍然不明智?或者有没有更好的方法来读取特定组件?
  • 最好使用 Calendar 类的 dateComponents(_:from:) 方法,它会为您提供 Date 对象中请求的组件。
【解决方案2】:

如果您的日期是字符串格式,例如 2019/12/03 14:35

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy/MM/dd HH:mm"
let date = dateFormatter.date(from: "2019/12/03 14:35")

您可以像这样将日期对象发送到 Firestore

let data:[String: Any] = ["notCurrentDate":date]

let db = Firestore.firestore()

db.collection("data").document("document").setData(data) { err in
  if let err = err {
      print("Error writing document: \(err)")
  } else {
      print("Document successfully written!")
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-31
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 2019-04-02
    • 2019-04-19
    相关资源
    最近更新 更多