返回介于两个日期之间的日期数组的方法-Swift 3

返回介于两个日期之间的日期数组的方法-Swift 3,swift,date,calendar,swift3,Swift,Date,Calendar,Swift3,我试图得到一个日期数组,从我的一个对象的时间戳到未来30天 我使用了下面的代码,但没有得到预期的结果,并且在尝试创建标题中描述的方法时遇到了困难。任何帮助都会很好,谢谢 var dates = [Date]() func fetchDays() { let cal = Calendar.current var dateComponents = DateComponents() dateComponents.year

我试图得到一个日期数组,从我的一个对象的时间戳到未来30天

我使用了下面的代码,但没有得到预期的结果,并且在尝试创建标题中描述的方法时遇到了困难。任何帮助都会很好,谢谢

var dates = [Date]()
    func fetchDays() {
            let cal = Calendar.current

            var dateComponents = DateComponents()
            dateComponents.year = 2017
            dateComponents.month = 2
            dateComponents.day = 12

            guard let startDate = cal.date(from: dateComponents) else {
                return }

            var start = cal.startOfDay(for: startDate)

            for _ in 0 ... 30 {
    guard let daysBetween = cal.date(byAdding: .day, value: 1, to: startDate) else { return }
                start = daysBetween
                dates.append(start)
            }
        }

您正在将1添加到同一开始日期,因此您的数组将一次又一次地被同一日期填充。只需将
1
替换为循环索引+1即可

for i in 0 ... 30 {
    if let newDate = cal.date(byAdding: .day, value: i + 1, to: startDate) {
        dates.append(newDate)
    }
}

您不需要
start
变量。

Hi@Breezy要使其工作,只需更改一点即可

将start的to参数的值更改如下:

  for _ in 0 ... 30 {
    guard let daysBetween = cal.date(byAdding: .day, value: 1, to: start) else { return }
                start = daysBetween
                dates.append(start)
            }
var dates = [Date]()
        func fetchDays() {
            let cal = Calendar.current

            var dateComponents = DateComponents()
            dateComponents.year = 2017
            dateComponents.month = 2
            dateComponents.day = 12

            guard let startDate = cal.date(from: dateComponents) else {
                return }

            var start = cal.startOfDay(for: startDate)
            guard let endDate = cal.date(byAdding: .month, value: 1, to: start) else { return }

            guard let daysBetween = cal.dateComponents([.day], from: start, to: endDate).day else { return }

            for _ in 0 ... daysBetween {
                guard let newDate = cal.date(byAdding: .day, value: 1, to: start) else { return }
                start = newDate
                dates.append(newDate)
            }
        }
编辑:

如果您不想使用30天,可以添加一个月末,然后获得两个日期之间的天数,如下所示:

  for _ in 0 ... 30 {
    guard let daysBetween = cal.date(byAdding: .day, value: 1, to: start) else { return }
                start = daysBetween
                dates.append(start)
            }
var dates = [Date]()
        func fetchDays() {
            let cal = Calendar.current

            var dateComponents = DateComponents()
            dateComponents.year = 2017
            dateComponents.month = 2
            dateComponents.day = 12

            guard let startDate = cal.date(from: dateComponents) else {
                return }

            var start = cal.startOfDay(for: startDate)
            guard let endDate = cal.date(byAdding: .month, value: 1, to: start) else { return }

            guard let daysBetween = cal.dateComponents([.day], from: start, to: endDate).day else { return }

            for _ in 0 ... daysBetween {
                guard let newDate = cal.date(byAdding: .day, value: 1, to: start) else { return }
                start = newDate
                dates.append(newDate)
            }
        }

在项目后期,我需要的天数可能会从一个月变为100天,这就是为什么我认为最好使用两个日期。但是谢谢!这真的帮了大忙。哦,天哪。非常感谢!