我正在寻求扩展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类来返回我们每周的特定日期?
谢谢
2 回答
而不是使用
dateByAddingComponents:
,您可以找到今天的工作日,并与目标工作日区分并更新日期组件 . 可以使用更新的组件参数通过dateFomComponents
方法生成所需日期 .您正在使用
dateByAddingComponents
,它将采用所提供的日期并根据日期组件向其添加一些时间单位 . 这些日期组件已被请求为CalendarUnitWeekday
和CalendarUnitWeekdayOrdinal
. 您已将其中一个明确设置为3,另一个设置为当前日期 . 所以,当你添加它们时,你不会在工作日添加3(可能,我想要你想要的东西) .相反,您应该找出当前的工作日并添加/减去天数,直到您到达下一个或上一个星期二 . 然后,一旦你在那里,你可以在这个日期安心地添加几天/几周以获得任何其他所需的日期 .