10

我需要从当前日期获取前一周和一个月。

所以我找到了可以重新计算当前日期添加间隔的解决方案

- dateByAddingTimeInterval

而这个参数:

[[NSDate date] dateByAddingTimeInterval: -604800.0](用于获取前一周)

[[NSDate date] dateByAddingTimeInterval: -2629743.83](用于获取上个月)

正如我认为的一周,这种方法效果很好,没有任何问题,因为每周有 7 天,间隔不会改变。但是对于月份我们有一个问题,因为每个月都有不同的天数。

4

2 回答 2

35

使用NSDateComponents它会很容易和准确

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *comps = [NSDateComponents new];
comps.month = -1;
comps.day   = -1;
NSDate *date = [calendar dateByAddingComponents:comps toDate:[NSDate date] options:0];
NSDateComponents *components = [calendar components:NSMonthCalendarUnit|NSDayCalendarUnit fromDate:date]; // Get necessary date components
NSLog(@"Previous month: %d",[components month]);
NSLog(@"Previous day  : %d",[components day]);
于 2013-03-25T09:41:28.473 回答
9

不要使用 903484 和 -23484 更改日期

这样做:

NSCalendar *gregorian=[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components=[[NSDateComponents alloc] init];

components.month=1;//next month
components.month=-1;//previous month
//similarly +1 and -1 will give you week and month day etc
components.week=1;
components.day=1;

NSDate *myMonth=[gregorian dateByAddingComponents:components toDate:today options:0];
NSDateComponents *components = [calendar components:NSMonthCalendarUnit|NSDayCalendarUnit fromDate:date]; 
NSInteger yourRequiredValue=[components day]; //day, month, week etc
于 2013-03-25T09:41:10.727 回答