代码之家  ›  专栏  ›  技术社区  ›  H.Epstein

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

  •  1
  • H.Epstein  · 技术社区  · 6 年前

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

    我试图在我的IOS应用程序中加载文档,但我找不到方法将JS保存的字符串转换为swift我尝试过的所有解决方案都会导致应用程序崩溃,因为转换后的值为零。

    这是我的密码

    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 String "Fri Aug 03 2018 22:43:00 GMT+0300 (IDT)"

    2 回复  |  直到 6 年前
        1
  •  3
  •   Helmer Barcos    6 年前

    您可以保存Firestore中的timestamp serverValue。它在unix时间中为您提供了一个时间戳,这个数字可以在swift中转换为人类时间。

    在节点服务器中

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

    迅速地

    let date = Date(timeIntervalSince1970: YOUR_TIMESTAMP_HERE_AS_VAR)
    
        2
  •  1
  •   Shahzaib Qureshi    6 年前

    你可以这样转换你的日期:

    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()))
    }