向NSDate添加一个月

时间:2014-01-22 21:39:59

标签: ios iphone nsdate nscalendar

我正在尝试在我的应用中设置开始日期和结束日期。结束日期应为从开始日期起一个月。

e.g。

start date = 1st January 2014
end date = 31st January 2014

目前我使用以下方法将一个月添加到开始日期,但结束日期为2014年2月1日。

dateByAddingComponents:toDate:options:

有没有办法达到我想要的结果,以便结束日期总是一个月 - 从开始日期起1天?

我希望这是有道理的。

谢谢。

3 个答案:

答案 0 :(得分:4)

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents *dateComp = [gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:[NSDate date]];

NSLog(@"Input Date: %@",[NSDate date]);

[dateComp setDay:dateComp.day - 1];

[dateComp setMonth:dateComp.month + 1];

NSDate *nextMonthMinusOneday = [gregorian dateFromComponents:dateComp];

NSLog(@"Output date %@",nextMonthMinusOneday);

<强>输出:

Input Date: 2014-03-31 21:21:34 +0000
Output date 2014-04-30 05:00:00 +0000

答案 1 :(得分:1)

不确定

- (NSDate *)lastDayOfMonthDateForDate:(NSDate *)date {
   NSDateComponents *comp = [NSDateComponents new];
   comp.day = -1;
   comp.month = 1;

   return [[NSCalendar currentCalendar] dateByAddingComponents:comp toDate:date options:0];
}

答案 2 :(得分:0)

 - (NSDate *)dateForNextMonthMinusSingleDay:(NSDate *)date {
    NSDateComponents *dayOffsetComponents = [[NSDateComponents alloc] init];
    [dayOffsetComponents setMonth:1];
    [dayOffsetComponents setDay:-1];
    return [[NSCalendar currentCalendar] dateByAddingComponents:dayOffsetComponents
                                                         toDate:date
                                                        options:0];
}


- (NSDate *)dateFromMMDDYYYYString:(NSString *)string {
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
    [formatter setDateFormat:@"MM/dd/yyyy"];
    return [formatter dateFromString:string]; 
}


NSDate *date = [self dateForNextMonthMinusSingleDay:[self dateFromMMDDYYYYString:@"01/01/2014"]];

我已验证上述代码及其正常工作。