简体   繁体   English

如何获得日期的“ n”个工作日

[英]How to get the 'n' weekday of a Date

I need to translate this function into swift. 我需要将此功能转换为快速功能。 Basically what does it get the 'n' day of the current week. 基本上,它将得到当前一周的“ n”天。 So for example if i use it with NSDate().getWeekDay(0) it gives me Sun 11 Sept, and so on. 因此,例如,如果我将其与NSDate()。getWeekDay(0)一起使用,它将给我9月11日,以此类推。 But seems rangeOfUnit no longer exists in Swift-3. 但是似乎rangeOfUnit在Swift-3中不再存在。 This was my previous implementation in Swift-2 这是我以前在Swift-2中实现的

extension NSDate {
    func getWeekDay(day: Int) -> NSDate {
        var beginningOfWeek: NSDate?
        NSCalendar.currentCalendar().rangeOfUnit(NSCalendarUnit.WeekOfYear, startDate: &beginningOfWeek, interval: nil, forDate: self)
        let comps = NSDateComponents()
        comps.day = day
        comps.minute = NSCalendar.currentCalendar().component(NSCalendarUnit.Minute, fromDate: self)
        comps.hour = NSCalendar.currentCalendar().component(NSCalendarUnit.Hour, fromDate: self)
        let nextDate = NSCalendar.currentCalendar().dateByAddingComponents(comps, toDate: beginningOfWeek!, options: .SearchBackwards)
        return nextDate!
    }
}

There is an alternative to get the start of the week which translates directly to Swift 3: 有一种替代方法可以让您从本周开始直接转换为Swift 3:

extension Date {
    func getWeekDay(day: Int) -> Date {
        let cal = Calendar.current
        let comps = cal.dateComponents([.weekOfYear, .yearForWeekOfYear], from: self)
        let beginningOfWeek = cal.date(from: comps)!
        let nextDate = cal.date(byAdding: .day, value: day, to: beginningOfWeek)!
        return nextDate
    }
}

This is your extension in Swift 3 for Date and a bit optimized 这是您在Swift 3中对Date扩展,并进行了一些优化

extension Date {
  func getWeekDay(day: Int) -> Date {
    var beginningOfWeek = Date()
    var interval : TimeInterval = 0
    let currentCalendar = Calendar.current
    currentCalendar.dateInterval(of: .weekOfYear, start: &beginningOfWeek, interval: &interval, for: self)
    return currentCalendar.date(byAdding: .day, value: day, to: beginningOfWeek)!
  }
}

rangeOfUnit(startDate:interval:forDate:) has been turned into dateInterval(of:start:interval:for:) in the new Calendar structure. 在新的Calendar结构中, rangeOfUnit(startDate:interval:forDate:)已变成dateInterval(of:start:interval:for:)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM