如何遍历Swift3中的日期范围对于x和y之间的每一天,调用一个方法并将该日期作为日期值传递

问题描述

我正在尝试执行以下操作:

对于开始日期和结束日期之间的每一天,请调用方法并将该日期作为日期传递...等。

这看起来应该很简单,但是我正在尝试的一切都没有解决。我不熟悉swift(这是一个我投入的项目),但是好像for循环这样的事情比我想象的要复杂。

我尝试研究的很多东西要么是过时的方法,要么更着重于计算两个日期之间的天数或诸如此类的我不需要的东西。

p.s。我可能需要相当大的日期范围(一年以上),所以我认为必须考虑使用某些方法来进行leap年之类的事情?

如果有人能提供帮助,我们将不胜感激

我不确定是否相关的任何其他信息:我正在使用xcode版本9.4.1,ios 11.4。我已经看到人们在这些项目中使用了c,但是我不太确定它是如何工作的,为此提供快速代码会很棒

解决方法

这应该很简单。只需计算出天数的差额,用它创建一个范围并遍历天数,将其添加到开始日期并调用您的方法即可。请注意,我使用的是正午时间,建议对时间不敏感的日历计算:

extension Date {
    var noon: Date {
        Calendar.current.date(bySettingHour: 12,minute: 0,second: 0,of: self)!
    }
}

let startOf2020 = DateComponents(calendar: .current,year: 2020,month: 1,day: 1).date!.noon
let now = Date().noon
let days = Calendar.current.dateComponents([.day],from: startOf2020,to: now).day!   // 302

(0...days).forEach { n in
    let date = Calendar.current.date(byAdding: .day,value: n,to: startOf2020)!
    print(date.description(with:.current))
}