获取上一个,下一个星期以及周六和周日

我想显示星期一星期五(不包括周六/周日)的date/date,如下图所示。

在这里输入图像说明

我的情景:

  1. 当屏幕加载当前周应显示。
  2. 在上一个button点击( DisplayedWeek – 1
  3. 点击下一步button( DisplayedWeek + 1 )。

我的工作

经过一番研究,这是我所尝试过的。

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)) } 

在我的情况下,如果一天是星期六星期天,它应该在下周显示,但它显示的是同一周。

你只需要得到当前星期一的date ,将它添加到一个数组,并映射最后一个数组元素添加一天:

 extension Calendar { static let iso8601 = Calendar(identifier: .iso8601) } extension Date { var cureentWeekMonday: Date { return Calendar.iso8601.date(from: Calendar.iso8601.dateComponents([.yearForWeekOfYear, .weekOfYear], from: Date()))! } var currentWeekdays: [Date] { var weekdays = [cureentWeekMonday] (1...4).forEach({ _ in weekdays.append(Calendar.iso8601.date(byAdding: DateComponents(day: 1), to: weekdays.last!)!) }) return weekdays } } 

 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"]