获取今天和 Swift 中给定日期之间的日期数组?
Get array of dates between today and given date in Swift?
我有一个字符串格式的日期,"yyyy-MM-dd" 并且想要 return 从今天开始的相同格式的日期差异数组。
例如给定的日期是“2019-06-29”,今天的日期是2019-06-25。 returned 数组将包含:["2019-06-25"、"2019-06-26"、"2019-06-27"、"2019-06-28"、"2019-06-29 "].
我尝试编写的方法也需要有效 cross-months/years。在 Swift 中可能发生这样的事情吗?
我尝试过的方法: 以数字方式计算日期差异(天数差异)并在给定日期上加一天直到达到今天的日期。这就是导致超过 30/31 天并且不移动到下一个 months/exceeding 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"]
我有一个字符串格式的日期,"yyyy-MM-dd" 并且想要 return 从今天开始的相同格式的日期差异数组。
例如给定的日期是“2019-06-29”,今天的日期是2019-06-25。 returned 数组将包含:["2019-06-25"、"2019-06-26"、"2019-06-27"、"2019-06-28"、"2019-06-29 "].
我尝试编写的方法也需要有效 cross-months/years。在 Swift 中可能发生这样的事情吗?
我尝试过的方法: 以数字方式计算日期差异(天数差异)并在给定日期上加一天直到达到今天的日期。这就是导致超过 30/31 天并且不移动到下一个 months/exceeding 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"]