如何在NSDate中添加一些周?
我过去使用下面的函数在特定的时间间隔内使用NSDateComponents
到现有日期。
(NSDate *)dateByAddingComponents:(NSDateComponents *)comps toDate:(NSDate *)date options:(NSCalendarOptions)opts
从iOS8开始, NSDateComponents
的周值已弃用,这意味着我无法实现我想要做的事情:通过向给定的NSDate
添加一定的周数来生成新的NSDate
。
任何帮助将不胜感激。
更新:正如Zaph在回答中所说,Apple实际上建议使用weekOfYear
或weekOfMonth
而不是我提供的答案。 查看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,具体取决于您的意思
当使用weekOfMonth
或weekOfYear
作为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]; }