获取NSDate当前日期 - 3个月

时间:2012-08-15 17:27:36

标签: objective-c ios ipad date nsdate

我如何获得当前日期 - 3个月?我需要它来进行数据库查询以获取过去3个月内的所有文件。

我知道操作“dateByAddingTimeInterval”但我不得不减去3个月。

1 个答案:

答案 0 :(得分:1)

根据您定义3个月的方式。如果你的意思是3个月前的同一天,你可以这样做:

    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *components = [calendar components:(NSHourCalendarUnit | NSMinuteCalendarUnit | NSYearCalendarUnit |NSMonthCalendarUnit|NSDayCalendarUnit) fromDate:[NSDate date]];

    NSInteger now_hour = [components hour];
    NSInteger now_minute = [components minute];
    NSInteger yearx =  [components year];
    NSInteger monthx =  [components month];
    NSInteger dayx =  [components day];

    //1 = january
    NSInteger monthsMinus3 = (monthx > 3) ? monthx -3 : (monthx +12 -3);
    NSDateComponents *comps = [[NSDateComponents alloc] init];
    [comps setMinute:now_minute];
    [comps setHour:now_hour];
    [comps setYear:yearx];
    [comps setMonth:monthx];
    [comps setDay:dayx];
    NSDate *threeMonthAgo = [calendar dateFromComponents:comps];

当然你也可以在不必创建额外日期的情况下更改月份,但我认为这更清晰,更灵活,以防你想调试和可能的更改日期,以防你在3个月前定义-n天取决于我们在哪个月。例如 - (30 + 31 + 30),或 - (31 + 30 + 31)或必须考虑28天的februray。

同样,所有这些都取决于你3个月前的定义......但这应该会引导你找到解决方案