ios - 如何在swift 3中将日期添加到日期

标签 ios swift date

我从服务中获取天数、开始日期和结束日期。我想获取开始日期和结束日期之间的所有日期的列表。假设我的开始日期是 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
}

关于ios - 如何在swift 3中将日期添加到日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45570546/

相关文章:

ruby-on-rails - 以美国格式: mm/dd/yyyy提交日期

ios - 循环遍历图像数组

swift - 需要解释双标签函数声明

date - 定期或重复日期的良好数据结构是什么?

ios - XCUIElement 点击不适用于自定义表格 View 单元格

ios - 使用 MKLocalSearchRequest

javascript - Underscrore 的 now 方法如何更快?

ios - 使用父 View 的框架更改调整 subview 的大小

ios - iOS 删除缩放图像。

ios - 不使用 Storyboard 的应用程序状态保存和恢复?