在今天至定期的日期之间获得一系列日期



我有一个字符串格式的日期," 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"]

最新更新