swift - 如何使用条件设置 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
}
解决方案
使用 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
}
推荐阅读
- node.js - AWS Lambda 层和本地结构
- cmd - Windows“开始”命令不会从“执行 shell 脚本”步骤中返回
- c# - 模块化应用(规模、性能、可能的问题)
- machine-learning - 为什么执行交叉验证后输出会发生变化?
- swift - webkit webview中的Google iframe问题它工作正常
- mysql - Mysql Docker容器 - 在创建时插入用户输入
- java - 如何检查 Spark 是否正在使用 OpenBlas?
- javascript - 无需将鼠标悬停在 WordPress 中的 Image Accordion Gallery 上即可显示标题
- php - 显示类中 SQL 的总 id 计数
- php - 通过在 Microsoft Graph Api 中批处理从单个请求创建多个联系人