ios - 查找一周/一个月/一年的所有日期并添加到 NSMutableArray

标签 ios objective-c nsdate nscalendar

我有一个 NSMutableArray,我希望能够只提取特定时间范围内的行,例如每周、每月或每年。我可以获得一周前的日期,这样我就会得到当前日期和一周前的日期,但我需要能够获取所有这些日子,然后将它们添加到数组中,以便我可以搜索它们。

这就是我如何捕获每一天和一周的每一天。

-(void)getCalDays {
cal = [NSCalendar currentCalendar];

NSDate *date = [NSDate date];
NSDateComponents *comps = [cal components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit)fromDate:date];
today = [cal dateFromComponents:comps];


   NSLog(@"today is %@", today);
    [self getWeek];
}

-(void)getWeek {
    NSDateComponents *components = [[NSDateComponents alloc] init];
    [components setDay:-6];
    weekDate = [cal dateByAddingComponents:components toDate:today options:0];
    NSLog(@"Week of %@ THRU %@", today, weekDate);
}

那么我怎样才能找到两个日期之间的所有日期并将它们加载到一个数组中呢?

最佳答案

您正在路上。关键是循环推进组件的日期并从中提取日期。

NSMutableArray *result = [NSMutableArray array];
NSCalendar *cal = [NSCalendar currentCalendar];

NSDate *startDate = // your input start date
NSDate *endDate = // your input end date

NSDateComponents *comps = [cal components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit)fromDate:startDate];
NSDate *date = [cal dateFromComponents:comps];

while (![date isEqualToDate:endDate]) {
    [result addObject:date];
    [comps setDay:(comps.day + 1)];
    date = [cal dateFromComponents:comps];
}

请注意,这将生成一个日期集合,包含第一个日期,不包含最后一个日期。您或许可以自己弄清楚如何更改边缘条件。

关于ios - 查找一周/一个月/一年的所有日期并添加到 NSMutableArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24345456/

相关文章:

ios - 如何按对象的多个属性对自定义对象列表进行排序

ios - 弄错时差

iphone - 生成随机字符串的代码会创建相同的字符串序列

ios - 为什么navigationBar和view之间显示黑屏

iphone - 带有图像的 UIScrollView - 如何不缩放其中之一

ios - 如何在不隐藏最后添加的 subview 的情况下添加多个 subview ?

objective-c - iOS 6 UIInterfacePortrait 仅显示 View Controller 并卡在横向...从导航堆栈中的横向 View Controller 返回时

ios - NSDate 与不同时区的另一个 NSDate 的本地时间相同

iphone - 在Friend Wall发表期间Facebook返回com.facebook.sdk错误5

ios - iOS 目标的 CMake xib 到 nib 编译