-3

I have two dates, date1 and date2 and I want days between date1 and date 2

Example:

let date1 = 28-May-2019,
let date2 = 31-May-2019

The expected output

[Tue, Web Thr, Fri]

Bhavik Modi
  • 1,517
  • 14
  • 29
Sajal Gupta
  • 147
  • 2
  • 14
  • 1
    https://stackoverflow.com/questions/32536612/all-dates-between-two-date-objects-swift Then convert theses "Date"s objects into a String representation you want. – Larme May 28 '19 at 13:14

3 Answers3

1
    let date1Str = "28-May-2019"
    let date2Str = "31-May-2019"

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "dd-MM-yyyy"
    dateFormatter.locale = Locale(identifier: "en_US")

    var date1 = dateFormatter.date(from:date1Str)!
    var date2 = dateFormatter.date(from:date2Str)!

    let dayFormatter = DateFormatter()
    dayFormatter.dateFormat = "EEE"

    while date1 <= date2 {
        let dayInWeek = dayFormatter.string(from: date1)
        print(dayInWeek)
        date1 = Calendar.current.date(byAdding: .day, value: 1, to: date1)!
    }
Bhavik Modi
  • 1,517
  • 14
  • 29
0

Try this -

func getWeekdays(dateOne firstDateStr: String, dateTwo secondDateStr: String) -> [String] {

    let dateformatter = DateFormatter()
    dateformatter.dateFormat = "dd-MMM-yyyy"

    guard let firstDate = dateformatter.date(from: firstDateStr),
        let secondDate = dateformatter.date(from: secondDateStr) else {
            return []
    }

    let calendar = Calendar.current
    let numberOfDays: Int

    if firstDate > secondDate {
        numberOfDays = (calendar.dateComponents([.day], from: secondDate, to: firstDate).day ?? 0)
    } else {
        numberOfDays = (calendar.dateComponents([.day], from: firstDate, to: secondDate).day ?? 0)
    }
    dateformatter.dateFormat = "EEE"

    let days = (0...numberOfDays).compactMap { day -> String? in
        if let date = calendar.date(byAdding: .day, value: day, to: firstDate) {
            return dateformatter.string(from: date)
        }
        return nil
    }
    print(days)

    return days
}
Aakash
  • 2,239
  • 15
  • 23
  • Do not hardcode your own weekday names. Either get the names using a `DateFormatter` or using the various weekday name properties from `Calendar`. – rmaddy May 28 '19 at 15:55
0

The following code gives you the days between two dates and should account for trickeries with the calendar.

let calendar = Calendar.current
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd-MMM-yyyy"
let dayFormatter = DateFormatter()
dayFormatter.dateFormat = "EEE"
let dateFrom = dateFormatter.date(from: "28-May-2019")!
let dateTo = dateFormatter.date(from: "31-May-2019")!


var days: [String] = []
var date = dateFrom
while date <= dateTo {
    let day = dayFormatter.string(from: date)
    days.append(day)
    date = calendar.date(byAdding: .day, value: 1, to: date)!
}
print(days)
Marcio
  • 1,979
  • 15
  • 25