2016-09-16 3 views
0

이 기능을 신속하게 번역해야합니다. 기본적으로 현재 주 'n'일은 무엇입니까? 예를 들어 NSDate(). getWeekDay (0)과 함께 사용하면 9 월 11 일 Sun 등이 제공됩니다. 그러나 Swift-3에는 rangeOfUnit이 더 이상 존재하지 않습니다.날짜의 'n'평일을 얻는 방법

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

답변

4

내 이전 구현했다 Date과 약간,141로 변신 한

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

최적화의 새로운 Calendar 구조입니다.

3

이 스위프트 3의 확장은 다음과 같습니다 이 스위프트 3로 직접 변환하는 일주일의 시작을 얻을 수있는 대안이있다 스위프트-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! 
    } 
}