我有一个字符串格式的日期," yyyy-mm-dd",并想返回与今天相同格式的日期差的数组。
例如,给定的日期为" 2019-06-29",今天的日期是2019-06-25。返回的阵列将包含:[" 2019-06-25"," 2019-06-26"," 2019-06-27"," 2019-06-28"," 2019-06-29"]。P>
我试图编写的方法还需要跨月/年来工作。Swift中有可能吗?
我尝试过的内容:数值(天数差异(计算日期的差异,并将一天添加到给定日期,直到达到今天的日期。这就是使超过30/31天的问题,而不是搬到接下来的几个月/超过2019-12-31,而不是搬到2020年。肯定有一种更简单的方法可以实现此结果而无需编写该日期逻辑手动?
extension Formatter {
static let date: DateFormatter = {
let dateFormatter = DateFormatter()
dateFormatter.calendar = Calendar(identifier: .iso8601)
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd"
return dateFormatter
}()
}
extension Date {
var noon: Date {
return Calendar.current.date(bySettingHour: 12, minute: 0, second: 0, of: self)!
}
}
func dates(for date: String) -> [String] {
// For calendrical calculations you should use noon time
// So lets get endDate's noon time
guard let endDate = Formatter.date.date(from: date)?.noon else { return [] }
// then lets get today's noon time
var date = Date().noon
var dates: [String] = []
// while date is less than or equal to endDate
while date <= endDate {
// add the formatted date to the array
dates.append( Formatter.date.string(from: date))
// increment the date by one day
date = Calendar.current.date(byAdding: .day, value: 1, to: date)!
}
return dates
}
dates(for: "2019-06-29") // ["2019-06-25", "2019-06-26", "2019-06-27", "2019-06-28", "2019-06-29"]