в Swift, как получить и преобразовать поле метки времени Firestore

#ios #swift #date #timestamp

#iOS #swift #Дата #временная метка

Вопрос:

Я настраиваю свою первую базу данных Firestore, и у меня есть несколько полей даты, сохраненных в виде временных меток. В моей структуре swift соответствующие свойства объявляются как Дата. Первый вопрос — это правильный способ сделать это? если да, то как мне получить эти значения метки времени? Я пытался найти решение, но оно не кажется очевидным решением.

 struct HealthLog1: Codable {
   var comment: String?
   var entryDate: Date?
   var familyMemberID: String?
   var logID: String?
   var user_ID: String?
 }



 db.collection("healthLogs").whereField("familyMemberID", isEqualTo: person.familyMemberID!).getDocuments { (snapshot, error) in
        
        if error == nil amp;amp; snapshot != nil {
            
            for doc in snapshot!.documents {
                
                let log = HealthLog1(
                    comment: doc["comment"] as? String,
                    entryDate: doc["entryDate"] as? Date,
                    familyMemberID: doc["familyMemberID"] as? String,
                    logID: doc["logID"] as? String,
                    user_ID: doc["user_ID"] as? String)
   
                healthLogs.append(log)

            }
            
            self.delegateHLP?.receiveLogs(healthLogs: healthLogs)
        }
        else {
            print ("there is some error with the get documents")
        }
    }
}
 

Ответ №1:

Объявите дату как временную метку.

Ваша модель

 class HealthLog1: Codable {
    var comment: String?
    var entryDate: Timestamp? //<-- Declare Timestamp
    var familyMemberID: String?
    var logID: String?
    var user_ID: String?
}
 

Инициализация

 let log = HealthLog1(
    comment: doc["comment"] as? String,
    entryDate: doc["entryDate"] as? Timestamp,
    familyMemberID: doc["familyMemberID"] as? String,
    logID: doc["logID"] as? String,
    user_ID: doc["user_ID"] as? String)
 

Если вам нужна дата из значения метки времени, используйте dateValue() :

 let entryDate = log.entryDate.dateValue()