[英]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.