How to add days to a date in swift 3

后端 未结 2 1912
南笙
南笙 2021-01-17 10:23

I am getting number of days,Start date and end date from a service. I want to get the list of all dates in between start date and end date. Let\'s say my start date is 2017/

相关标签:
2条回答
  • 2021-01-17 10:36

    You are making it really complicated.Just use simple date class methods for difference and generate new dates with a for loop and Calendar class.

    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)
    }
    
    0 讨论(0)
  • 2021-01-17 10:55

    A simple while loop will get you what you need. Example:

    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
    }
    

    Edit: Or you can change your implementation slightly if you get your end date in advance

    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
    }
    
    0 讨论(0)
提交回复
热议问题