首页 文章

每周特定日期的NSDate延期

提问于
浏览
0

我正在寻求扩展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 回答

  • 0

    而不是使用 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)!
        }}
    
  • 1

    您正在使用 dateByAddingComponents ,它将采用所提供的日期并根据日期组件向其添加一些时间单位 . 这些日期组件已被请求为 CalendarUnitWeekdayCalendarUnitWeekdayOrdinal . 您已将其中一个明确设置为3,另一个设置为当前日期 . 所以,当你添加它们时,你不会在工作日添加3(可能,我想要你想要的东西) .

    相反,您应该找出当前的工作日并添加/减去天数,直到您到达下一个或上一个星期二 . 然后,一旦你在那里,你可以在这个日期安心地添加几天/几周以获得任何其他所需的日期 .

相关问题