首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SwiftUI - Firebase -无时间保存日期

SwiftUI - Firebase -无时间保存日期
EN

Stack Overflow用户
提问于 2022-02-12 14:44:20
回答 1查看 249关注 0票数 0

大家好,我有这个结构,我用它来保存火源数据.如您所见,我有一个var reservation_date: Date字段

显然,Firebase可以节省时间,但我只需要日期而不需要保存时间,我怎么能得到这个日期呢?

我就是这样救自己的

代码语言:javascript
复制
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: "")
    
}

代码语言:javascript
复制
// 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)
        }
    }
}
EN

Stack Overflow用户

发布于 2022-02-13 16:48:37

如果您只对date值感兴趣,那么我建议使用符合ISO8601标准的字符串,在这种情况下,这个字符串就是yyyy-mm-dd (例如:"2022-02-13")。Swift有一个现成的ISO-8601格式化程序。

代码语言:javascript
复制
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 (然后在转换过程中呈现本地时区值)或在转换过程中使用本地时区(只是在转换过程中不要混合它们)。要始终处理本地时区,可以在格式化程序上设置其属性:

代码语言:javascript
复制
formatter.timeZone = .current
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71092869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档