我希望扩展 NSDate 类,以便我能够将当前所在的每周星期二引用为 NSDate。
我知道这可以通过 NSDateComponents 来完成。到目前为止,我有以下内容:
extension NSDate {
var tuesday: NSDate {
let calendar = NSCalendar.currentCalendar()
let todaysDate = NSDate()
let weekdayComponents = calendar.components(.CalendarUnitWeekday | .CalendarUnitWeekdayOrdinal, fromDate: todaysDate)
weekdayComponents.weekday = 3
let returnTuesday = calendar.dateByAddingComponents(weekdayComponents, toDate: todaysDate, options: nil)
return returnTuesday!
}}
我相信 CalendarUnitWeekday 在基于索引的系统上工作(即星期日 = 1,星期六 = 7),这就是为什么我将星期二所需的工作日设置为 3。
但是,当初始化 NSDate 对象并访问此扩展的“星期二”属性时,我提前一个月收到了日期。
(今天的日期 - “2015 年 8 月 26 日,下午 4:42”) (星期二日期 - “2015 年 9 月 26 日,下午 4:42”)
是什么导致了一个月的提前?有没有办法通过扩展 NSDate 类来返回我们所在的每周的具体日期?
谢谢
最佳答案
而不是使用 dateByAddingComponents:
,您可以找到今天的工作日并获取它与目标工作日的差异并更新日期组件。
所需的日期可以通过 dateFomComponents
方法使用更新的组件参数生成。
extension NSDate {
var tuesday: NSDate {
let calendar = NSCalendar.currentCalendar()
let components = calendar.components(.CalendarUnitWeekday | .CalendarUnitDay | .CalendarUnitMonth | .CalendarUnitYear | .CalendarUnitHour | .CalendarUnitMinute, fromDate: NSDate())
let targetDay = 3 //Required day
let today = components.weekday
if (targetDay < today) {
components.day -= today - targetDay
} else {
components.day += targetDay - today
}
return calendar.dateFromComponents(components)!
}}
关于ios - 每周特定日期的 NSDate 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32231179/