一周中给定的一天的日期列表



我需要获取一周给定日期的日期列表。

例如:如果用户从Picker中选择随机日期,例如2017-6-7,我需要获取并显示本周的日期。[2017-6-4,2017-6-5,2017-6-6,2017-6-7,2017-6-8,2017-6-9,2017-6-10]

我在互联网上找不到任何解决方案。

谢谢

尝试以下:

let dateInWeek = Date()//7th June 2017
let calendar = Calendar.current
let dayOfWeek = calendar.component(.weekday, from: dateInWeek)
let weekdays = calendar.range(of: .weekday, in: .weekOfYear, for: dateInWeek)!
let days = (weekdays.lowerBound ..< weekdays.upperBound)
    .compactMap { calendar.date(byAdding: .day, value: $0 - dayOfWeek, to: dateInWeek) }
print(days)

它将为您提供:

2017年6月4日(星期日(
2017年6月5日
2017年6月6日
2017年6月7日
2017年6月8日
2017年6月9日
2017年6月10日(星期六(


从monday开始
以上是我日历的默认行为,这就是为什么它是从星期日开始的。
如果您想从星期一开始,请进行此更改:

let dayOfWeek = calendar.component(.weekday, from: dateInWeek) - 1

这取决于您的日历在哪个语言环境中。

这是使用Calendar

的日期数学技能的起点
var calendar = Calendar.current
calendar.firstWeekday = 1 // adjust first weekday if necessary
var startOfWeek = Date()
var interval : TimeInterval = 0.0
_ = calendar.dateInterval(of:.weekOfYear, start: &startOfWeek, interval: &interval, for: Date())
for i in 0..<7 {
    print(calendar.date(byAdding: .day, value: i, to: startOfWeek)!)
}

您可以使用此。

 let today = Date()
  let  weekStartDate = today.getWeekStartDate(fromDate: today)
   for i in 0..<5 {
    let nextDate = weekStartDate?.getNextDay(value: i, currentDate:weekStartDate)
}
func getWeekStartDate(fromDate : Date?) -> Date? {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd"
        if let date = fromDate {
            var calendar = Calendar(identifier: .gregorian)
            calendar.firstWeekday = 3
            var startDate : Date = Date()
            var interval : TimeInterval = 0
            if calendar.dateInterval(of: .weekOfYear, start: &startDate, interval: &interval, for: date) {
                print("Start of week is (startDate)")
                // prints "Start of week is 2017-01-01 06:00:00 +0000"
                return startDate
            }
        }
        return nil
    }

     func getNextDay(value : Int, currentDate : Date?) -> Date? {
            let dayComponenet = NSDateComponents()
            dayComponenet.day = value
            let theCalendar = NSCalendar.current
            let nextDate = theCalendar.date(byAdding: dayComponenet as DateComponents, to: currentDate!)
            return nextDate
        }

希望这会有所帮助!

最新更新