Louka Studio
Louka Studio

Reputation: 11

firebase firestore date time sptamp returns nil swift

I created a func that reads from firebase

When I print date is always nil and I locked at firebase in my browser and the date exists. so please can some body help me?

func fetchEventData(group:groupeViewModel)  {
    
    print("featchingEventData")
    if user != nil {
        db.collection("events").whereField("group_id", isEqualTo: group.id).addSnapshotListener({(snapshot, err) in
            guard let documents = snapshot?.documents else {
                print("no docs returned")
                return
            }
                var cont = -1
            self.groupes[group.cont].envents = documents.map({docSnapshot -> eventViewModel in
                        cont += 1
                        let data = docSnapshot.data()
                        let docId = docSnapshot.documentID
                        let name = data["name"] as? String
                        let des = data["des"] as? String
                        let res = data["reservation"] as! Int
                        let cost = data["reservation"] as! Float
                        let isDate = data["isDate"] as! Bool
                        var date = data["date"] as? Date
                        let link = data["link"] as? String
                        let textColor = data["TextColor"] as! Bool
                        var res_users = data["res_users"] as? [String]
                        if res_users == nil{
                            res_users = [""]
                        }
                        if date == nil{
                            
                            date = Date(timeIntervalSince1970: 135670000)
                        }
                print("date \(date)")
                    print("update")
                return eventViewModel(id: docId, name: name!, description: des!, TextColor: textColor, reservation: res, reserved_user:res_users!, cost: cost, isDate: isDate, date:  date!, link: link!, cont: cont)

                })
                print("events \(self.events)")
        })
    }
}

Upvotes: 0

Views: 446

Answers (1)

slushy
slushy

Reputation: 12385

You have to toggle between Swift's Date object and Firestore's Timestamp object. Note that Firestore uses tokens to represent timestamps which is not as straightforward as using primitive types like integers or strings. Therefore, if you see unexpected behavior with these timestamps such as nil where there should be value or values that aren't exactly equal but "close enough", it's likely a side effect of this token system.

Read

if let timestamp = data["date"] as? Timestamp {
    let date = timestamp.dateValue()
}

Write

let now = Date()
let timestanmp = Timestamp(date: now)

Upvotes: 1

Related Questions