I wants to display dates/days from Monday to Friday excluding Saturday/Sunday as mentioned in the image below.
My Scenario:
My Work,
After some research this is what i have tried.
let calendar = Calendar.current
let currentDate = calendar.startOfDay(for: Date())
/* value = 0 for current,
value = 1 for next,
value = -1 for previous week.
*/
let nextWeek:Date = calendar.date(byAdding: .weekOfMonth, value: 1, to: currentDate)! as Date
let dayOfWeek = calendar.component(.weekday, from: nextWeek)
let weekdays = calendar.range(of: .weekday, in: .weekOfYear, for: nextWeek)!
let days = (weekdays.lowerBound ..< weekdays.upperBound).flatMap {
calendar.date(byAdding: .day, value: $0 - dayOfWeek, to: nextWeek)
}.filter { !calendar.isDateInWeekend($0) }
// Week Days from monday to friday
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
for date in days {
print(formatter.string(from: date))
}
In my case if the day is Saturday or Sunday it should display next week but it is displaying the same week.
You can get the current week monday's date, and just add n days to it:
Swift 4.1 • Xcode 9.3 or later
extension Calendar {
static let iso8601 = Calendar(identifier: .iso8601)
}
extension Date {
var cureentWeekMonday: Date {
return Calendar.iso8601.date(from: Calendar.iso8601.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self))!
}
var currentWeekdays: [Date] {
return (0...4).compactMap{ Calendar.iso8601.date(byAdding: DateComponents(day: $0), to: cureentWeekMonday) } // for Swift versions earlier than 4.1 use flatMap instead
}
}
let currentWeekdays = Date().currentWeekdays
print(currentWeekdays) // ["Jul 17, 2017, 12:00 AM", "Jul 18, 2017, 12:00 AM", "Jul 19, 2017, 12:00 AM", "Jul 20, 2017, 12:00 AM", "Jul 21, 2017, 12:00 AM"]