首页 > 解决方案 > 如何使用条件设置 SwiftUI 日历默认日期?

问题描述

设置默认日历日期。如果默认日期早于 01/01/2021,则使用 01/01/2021,或使用 DateComponents(year: -1), to: Date()) 作为默认日期。

 public var filterSelections: [String: Any] = []

@Published var fromDate: Date =
    Calendar.current.date(byAdding: DateComponents(year: -1), to: Date()) ?? Date(){
        didSet {
            filterSelections.append(anotherDict: [
                                        "fromDate": self.fromDate.dateStringFromSystemDate,
                                        "toDate":self.toDate.dateStringFromSystemDate])
        }
    }
}


func getDefaultFromDate() -> String{
        let strFromDate = "2021-01-01"
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ssZZZ"
        let fromDate = dateFormatter.date(from: strFromDate)
        
        var defaultFromDate = Calendar.current.date(byAdding: DateComponents(year: -1), to: Date()) ?? Date()
        
        if (defaultFromDate < fromDate ?? Date()){
            defaultFromDate = fromDate ?? Date()
        }
        print("---- \(defaultFromDate) ")
        
        return defaultFromDate.dateStringFromSystemDate
        
    }

标签: swift

解决方案


使用 DateComponents 获取 2021-1-1 作为 Date 并使用 Calendar 获取一年前的日期,然后返回两者的最大值

func defaultDate() -> Date? {
    if let firstDayOfYear = DateComponents(calendar: .current,year: 2021, month: 1, day: 1).date,
       let oneYearAgo = Calendar.current.date(byAdding: .year, value: -1, to: Date()) {
        return max(firstDayOfYear, oneYearAgo)
    }
    return nil
}

推荐阅读