我有一个字符串格式的日期“ yyyy-MM-dd”,并希望从今天开始以相同的格式返回日期差的数组。
例如,给定日期为“ 2019-06-29”,今天的日期为2019-06-25。返回的数组将包含:[“ 2019-06-25”,“ 2019-06-26”,“ 2019-06-27”,“ 2019-06-28”,“ 2019-06-29”]。>
我尝试编写的方法也需要跨月/跨年工作。在Swift中可能会发生这种情况吗?
我尝试过的操作:通过数字计算日期差(天数),并将天数添加到给定日期中,直到达到今天为止。这就是导致超过30/31天且不移至下个月/超过2019-12-31且不移至2020年的问题。当然,有一种更简单的简洁方法即可达到此结果,而不必写下该日期手动逻辑?
答案 0 :(得分:1)
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"]