如何在NSDate中添加一些周?

时间:2015-01-13 02:54:44

标签: ios objective-c ios8 nsdate nsdatecomponents

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

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

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

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:17)

只需使用weekOfYear

适用于NSDateComponents week的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);

输出:

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

如果您使用week,则会收到此警告:

  

'周'不推荐使用:首先在...中弃用 - 使用weekOfMonth或weekOfYear,具体取决于您的意思

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

答案 1 :(得分:9)

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:-1)

您可以使用以下方法在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];
}