如何在NSDate中添加一些周?

Ric*_*ich 7 objective-c nsdate nsdatecomponents ios ios8

我过去使用以下函数来使用NSDateComponents现有日期添加特定时间间隔.

(NSDate *)dateByAddingComponents:(NSDateComponents *)comps
                          toDate:(NSDate *)date
                         options:(NSCalendarOptions)opts
Run Code Online (Sandbox Code Playgroud)

从iOS8开始,不推荐使用周值NSDateComponents,这意味着我无法实现我想要做的事情:NSDate通过向给定数量添加特定周数来生成新值NSDate.

任何帮助将不胜感激.

zap*_*aph 17

只需使用weekOfYear:

Apple文档NSDateComponents week:

弃用语句
使用weekOfYear或weekOfMonth,具体取决于您的意图.

NSDate *date = [NSDate date];
NSDateComponents *comp = [NSDateComponents new];
comp.weekOfYear = 3;
NSDate *date1 = [[NSCalendar currentCalendar] dateByAddingComponents:comp toDate:date options:0];
NSLog(@"date:  %@", date);
NSLog(@"date1: %@", date1);
Run Code Online (Sandbox Code Playgroud)

输出:

     
date:  2015-01-13 04:06:26 +0000  
date1: 2015-02-03 04:06:26 +0000

如果你使用,week你得到这个警告:

'周'已弃用:首先弃用... - 使用weekOfMonth或weekOfYear,具体取决于您的意思

当使用weekOfMonthweekOfYear作为delta时,它们的工作方式相同.它们不同的地方在于它们被用来获得星期数,在那里您将获得6个星期或一年中53周的星期.


Lyn*_*ott 10

更新:正如Zaph在回答中所说,Apple实际上建议使用weekOfYearweekOfMonth代替我提供的答案.查看Zaph的答案以获取详细信息.


你可能会很快意识到你正在过度思考它,但是这里有一些方法可以为一个日期添加一定的周数,即使周价值已被弃用,例如:

NSDateComponents *comp = [NSDateComponents new];
int numberOfDaysInAWeek = 7;
int weeks = 3; // <-- this example adds 3 weeks
comp.day = weeks * numberOfDaysInAWeek;

NSDate *date = [[NSCalendar currentCalendar] dateByAddingComponents:comp toDate:date options:0];
Run Code Online (Sandbox Code Playgroud)