separate future date in nsmutablearray

2019-08-07 17:35发布

I am having a mutable array in that array i am having only past date, current date & future date. I have to separate the future date & store into another array. Can you help me.

This is my array:

uniqueItems(
    "2015-03-01",
    "2015-02-28",
    "2015-02-22",
    "2015-02-21",
    "2015-02-20",
    "2015-02-15",
    "2015-02-14",
    "2015-02-13",
    "2015-02-08",
    "2015-02-07",
    "2015-02-01",
    "2015-01-31",
    "2015-01-30",
    "2015-01-25",
    "2015-01-24",
    "2015-01-18",
    "2015-01-17",
    "2015-01-16",
    "2015-01-11",
    "2015-01-10",
    "2014-12-07"

I have tried this coding, but is not working.

NSDate *currentDate = [NSDate date];
 NSDate* dateAdded=(NSDate*)[uniqueItems objectAtIndex:0];
 double min = [currentDate timeIntervalSinceDate:dateAdded];
int minIndex = 0;
 for (int i = 1; i < [uniqueItems count]; ++i)
{

    double currentmin = [currentDate timeIntervalSinceDate:[uniqueItems objectAtIndex:i]];
    if (currentmin < min) {
        min = currentmin;
        minIndex = i;}}

3条回答
贪生不怕死
2楼-- · 2019-08-07 17:44

Your array is of string format not an NSDate object. You can convert a string to nsdate

NSString *dateString = @"2010-02-13";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate *dateFromString = [[NSDate alloc] init];
dateFromString = [dateFormatter dateFromString:dateString];

and then you could do your check.

查看更多
beautiful°
3楼-- · 2019-08-07 17:59
NSDate *currentDate = [NSDate date];
NSDate *date;
int offset = 0;
NSMutableArray *futureArray = [[NSMutableArray alloc] init];
for (int i = 1; i < [uniqueItems count]; ++i)
{
    date = [uniqueItems objectAtIndex:i];//TODO: Convert to NSDate
    offset = [currentDate timeIntervalSinceDate:date];
    if (offset < 0) {
    [futureArray addObject:[uniqueItems objectAtIndex:i]];
}
}

This is a idea. Sorry, I'm coding in notepad without test.

查看更多
相关推荐>>
4楼-- · 2019-08-07 18:02

you can use NSPredicate block for that. your array does not contain NSDate objects so we need to convert it into NSDate and then compare with [NSDate date]

NSPredicate *findFutureDates = [NSPredicate predicateWithBlock: ^BOOL(id obj, NSDictionary *bind){
    NSDateFormatter *df = [[NSDateFormatter alloc]init];
    [df setDateFormat:@"yyyy-MM-dd"];
    [df setTimeZone:[NSTimeZone systemTimeZone]];
    NSDate *dd = [df dateFromString:(NSString *)obj ];
    return ([[NSDate date] compare:dd] == NSOrderedAscending);
}];

NSArray *arrFutureDates = [yourArray filteredArrayUsingPredicate: findFutureDates];
NSLog(@"%@",arrFutureDates);

if you pass NSOrderedAscending will give you future dates if you pass NSOrderedDescending will give you past dates.

查看更多
登录 后发表回答