在Swift中将从JS保存的字符串转换为日期

时间:2018-08-04 06:09:10

标签: javascript swift google-cloud-firestore

我正在将Node js服务器中的时间戳记保存到Firestore数据库中, 由于某种原因,它将Date()保存为数据库中的字符串。

我正在尝试将文档加载到IOS应用程序中,但是我找不到一种方法来转换JS保存的字符串以快速处理所有我尝试过的解决方案,导致该应用程序崩溃,因为转换。

这是我的代码

func convertStringToDate(date:String) -> Date{
   let dateFormatter = DateFormatter()
   dateFormatter.dateFormat = "yyyy'-'MM'-'dd'T'HH':'mm'"
   let returnValue =  dateFormatter.date(from: date)
   return returnValue!
}
我从Firestore收到的

date值是:
 date String "Fri Aug 03 2018 22:43:00 GMT+0300 (IDT)"

2 个答案:

答案 0 :(得分:3)

您可以只从Firestore保存时间戳serverValue。它以Unix时间为您提供了TIMESTAMP,这是一个您可以迅速转换为人类时间的数字。

在您的节点服务器中

const timestamp = firebase.firestore.FieldValue.serverTimestamp()
ref.update({ updatedAt: timestamp })

在Swift中

let date = Date(timeIntervalSince1970: YOUR_TIMESTAMP_HERE_AS_VAR)

答案 1 :(得分:1)

您可以像这样转换日期:

var dateStr = "Fri Aug 03 2018 22:43:00 GMT+0300 (IDT)"
    guard let ind = dateStr.index(of: "G") else {return}
    dateStr = String(dateStr[..<ind].trimmingCharacters(in: CharacterSet.whitespaces))
    print(convertStringToDate(date: dateStr))

func convertStringToDate(date:String) -> Date{
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "EEE MMM dd yyyy HH:mm:ss"
    let returnValue =  dateFormatter.date(from: date)
    let timeZone = TimeZone.current
    return returnValue!.addingTimeInterval(TimeInterval(timeZone.secondsFromGMT()))
}