大家好,我有这个结构,我用它来保存火源数据.如您所见,我有一个var reservation_date: Date字段
显然,Firebase可以节省时间,但我只需要日期而不需要保存时间,我怎么能得到这个日期呢?
我就是这样救自己的
struct Reservations: Identifiable, Codable {
    @DocumentID var id: String?
    var reservation_date: Date
    var user: String
    @ExplicitNull var userID: String?
    var reservation_id: String
    @FirebaseFirestoreSwift.ServerTimestamp var createdAt: Timestamp?
    enum CodingKeys: String, CodingKey {
        case id
        case reservation_date
        case user
        case userID
        case reservation_id
        case createdAt
    }
    static let sample = Reservations(reservation_date: Date(), user: "", userID: "", reservation_id: "")
    
}// MARK: - Firebase
extension ReservationViewModel {
    func addReservation() {
        guard let newDate = Calendar.current.date(bySettingHour: hour, minute: minute, second: 0, of: selectedDate) else {
            print("Non è stato possibile creare una data di prenotazione valida")
            return }
        
        let dBPath = db.collection("Prenotazioni")
            .document(newDate.formatted(.dateTime.year()))
            .collection(newDate.formatted(.dateTime.month(.wide).locale(Locale(identifier: "it"))))
            .document(newDate.formatted(.dateTime.day(.twoDigits)))
            .collection("Ore \(newDate.formatted(.dateTime.hour(.twoDigits(amPM: .omitted)).locale(Locale(identifier: "it"))) + ":" + newDate.formatted(.dateTime.minute(.twoDigits)))")
        do {
            let _ = try dBPath.addDocument(from: reservation)
        }
        catch {
            print(error)
        }
    }
}发布于 2022-02-13 16:48:37
如果您只对date值感兴趣,那么我建议使用符合ISO8601标准的字符串,在这种情况下,这个字符串就是yyyy-mm-dd (例如:"2022-02-13")。Swift有一个现成的ISO-8601格式化程序。
let formatter = ISO8601DateFormatter()
formatter.formatOptions = [.withFullDate]
// From String to Date
let reservationDay = "2022-03-25" // save this in your database
if let date = formatter.date(from: reservationDay) {
    print(date) // Swift Date object
}
// From Date to String
let reservationDate = Date() 
let day = formatter.string(from: reservationDate)
print(day) // String "2022-02-13"但是,请注意时区,因为默认情况是GMT,您希望在整个转换过程中使用GMT (然后在转换过程中呈现本地时区值)或在转换过程中使用本地时区(只是在转换过程中不要混合它们)。要始终处理本地时区,可以在格式化程序上设置其属性:
formatter.timeZone = .currenthttps://stackoverflow.com/questions/71092869
复制相似问题