如何在NSDate中添加一些周?

我过去使用下面的函数在特定的时间间隔内使用NSDateComponents到现有日期。

 (NSDate *)dateByAddingComponents:(NSDateComponents *)comps toDate:(NSDate *)date options:(NSCalendarOptions)opts 

从iOS8开始, NSDateComponents的周值已弃用,这意味着我无法实现我想要做的事情:通过向给定的NSDate添加一定的周数来生成新的NSDate

任何帮助将不胜感激。

更新:正如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]; 

只需使用weekOfYear

week NSDateComponents Apple文档:

弃用声明
请改用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); 

输出:

     
日期:2015-01-13 04:06:26 +0000  
 date1:​​2015-02-03 04:06:26 +0000

如果您使用week则会收到以下警告:

‘周’已被弃用:首先弃用… – 使用weekOfMonth或weekOfYear,具体取决于您的意思

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

我更喜欢使用dateByAddingUnit。 它更直观

 return [NSDate[[NSCalendar currentCalendar] dateByAddingUnit:NSCalendarUnitMonth value:3 toDate:toDate options:0]; 

您可以使用以下方法在NSDate上添加类别:

 - (NSDate *) addWeeks:(NSInteger)weeks { NSCalendar *gregorian=[[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; NSDateComponents *components=[[NSDateComponents alloc] init]; components.day = weeks * 7; return [gregorian dateByAddingComponents:components toDate:self options:0]; }