我正在尝试在我的应用中设置开始日期和结束日期。结束日期应为从开始日期起一个月。
e.g。
start date = 1st January 2014
end date = 31st January 2014
目前我使用以下方法将一个月添加到开始日期,但结束日期为2014年2月1日。
dateByAddingComponents:toDate:options:
有没有办法达到我想要的结果,以便结束日期总是一个月 - 从开始日期起1天?
我希望这是有道理的。
谢谢。
答案 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"]];
我已验证上述代码及其正常工作。