如何在swift 3中添加日期到日期

我从服务中获取天数,开始日期和结束日期。 我想获得开始日期和结束日期之间所有日期的列表。 假设我的开始日期是2017/08/15,结束日期是2017/08/16,天数是2。

但我得到这样的日期列表。

##### CONVERTED STRING DATE 2017-08-16 ##### CONVERTED STRING DATE 2017-08-17 ##### CONVERTED STRING DATE 2017-08-18 

我有另一个这样的日期

开始日期2017/08/23结束日期2017/09/01和天数8.然后我得到这样的列表。

 ##### CONVERTED STRING DATE 2017-08-24 ##### CONVERTED STRING DATE 2017-08-25 ##### CONVERTED STRING DATE 2017-08-28 ##### CONVERTED STRING DATE 2017-08-29 ##### CONVERTED STRING DATE 2017-08-30 ##### CONVERTED STRING DATE 2017-08-31 ##### CONVERTED STRING DATE 2017-09-01 

这就是我获取日期数组的方法

  numberOfDates=Int(ceil(numOfDay)) //numberOfDates=numberOfDates-1 let arrayDates=self.generateDates(startDate: startDate, addbyUnit: .day, value: numberOfDates) 

这是我的日期计算方法

 internal func generateDates(startDate :Date?, addbyUnit:Calendar.Component, value : Int) -> [Date] { //print("####START DATE#######\(startDate)") var calendar = Calendar.current calendar.timeZone=TimeZone.current var datesArray: [Date] = [Date] () for i in 0 ... value { var addAmount:Int! if(value==0) { addAmount=0 } else { addAmount=1 } if let newDate = calendar.date(byAdding: addbyUnit, value: i + addAmount, to: startDate!) { let strDayName=self.getDayName(mydate: newDate) if (strDayName != "Saturday" && strDayName != "Sunday") { datesArray.append(newDate) } } } return datesArray } 

我的问题有时是日期列表错误(第一种情况),但在第二种情况下它是正确的。

一个简单的while循环将为您提供所需的一切。 例:

 func generateDates(startDate :Date?, addbyUnit:Calendar.Component, value : Int) -> [Date] { var dates = [Date]() var date = startDate! let endDate = Calendar.current.date(byAdding: addbyUnit, value: value, to: date)! while date < endDate { date = Calendar.current.date(byAdding: addbyUnit, value: 1, to: date)! dates.append(date) } return dates } 

编辑:或者如果您提前结束日期,则可以稍微更改您的实施

 func generateDates(between startDate: Date?, and endDate: Date?, byAdding: Calendar.Component) -> [Date] { var dates = [Date]() guard var date = startDate, let endDate = endDate else { return [] } while date < endDate { date = Calendar.current.date(byAdding: byAdding, value: 1, to: date)! dates.append(date) } return dates } 

你使它变得非常复杂。只需使用简单的日期类方法来区别,并使用for循环和Calendar类生成新日期。

 let startDate = Date() let endDate = Date(timeInterval: 2*86400, since: startDate) let components = Calendar.current.dateComponents([.day], from: startDate, to: endDate) let numberOfDays = components.day ?? 0 for i in 1...numberOfDays { let nextDate = Calendar.current.date(byAdding: .day, value: i, to: startDate) print(nextDate) }