从Firebase转换时间戳并将其添加到数组

时间:2018-11-15 20:53:33

标签: swift firebase

我正在尝试从Firebase读取timeStamp并将其附加到数组。

我已经取得了一些进展:

   var orderDateHistoryArray = [String:Int]() 

func getOrderDates() {

        let uid = Auth.auth().currentUser!.uid
        let orderDateHistoryRef = Database.database().reference().child("users/\(uid)/Orders/")

        orderDateHistoryRef.observeSingleEvent(of: .value, with: { (snapshot) in

            // Get dates
            let value = snapshot.value as? NSDictionary
            if  let orderDate = value?["Date"] as? [String:Int] {

                self.orderDateHistoryArray += Array(orderDate.values)//This does not conform
                print(orderDate)
            }
            self.tableView.reloadData()
            // ...
        }) { (error) in
            print(error.localizedDescription)
        }
    }    

print(orderDate)声明打印:

  

[“-LQYspEghK3KE27MlFNE”:1541421618601,
  “ -LQsYbhf-vl-NnRLTHhK”:1541768379422,
  “ -LQYDWAKlzTrlTtO1Qiz”:1541410526186,
  “ -LQsILjpNqKwLl9XBcQm”:1541764115618]

这是childByAutoIDtimeInMilliseconds

因此,我想读出timeInMilliseconds,将其转换为可读的timestamp,并将其附加到orderDateHistoryArray

2 个答案:

答案 0 :(得分:0)

这些是时间戳。将其解析为Date对象,然后使用.toLocaleDateString获取日期。

alert( new Date(1541421618601).toLocaleDateString("en-US") );

答案 1 :(得分:0)

要转换timestamp,必须先对字典返回的每个值都删除毫秒。

self.orderDateHistoryArray += Array(orderDate.values).map { Date(timeIntervalSince1970: TimeInterval($0/1000)) }

为了以“人工方式”获得它,您需要具有DateFormatter。在该对象上,您可以定义其显示方式。

extension Date {
  func format(_ dateFormat: String = "dd/MMMM")
    let formatter = DateFormatter()
    formatter.timeZone = TimeZone.current
    formatter.dateFormat = "MMMM dd"
    return formatter.string(from: self)
  }
}

Date元素上,您可以通过date.format()或通过传递字符串date.format("yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX")

来调用它