从日期间隔获取日期部分

时间:2014-01-16 08:01:09

标签: ios iphone nsdate

我希望从日期间隔中获取日期部分。 例如,我的日期间隔为21/12/2013至2013年12月28日。 现在我想从这个区间得到全天的部分,如21,22,23,24,25,26,27,28。

  NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[dateFormatter setTimeZone:gmt];
[dateFormatter setDateFormat:@"MMM dd, yyyy"];
NSString *date_str=[NSString stringWithFormat:@"%@",from_date];
NSLog(@"%@",date_str);
NSString *date_str1=[NSString stringWithFormat:@"%@",to_date];
NSLog(@"%@",date_str1);
NSDate *starting_date = [dateFormatter dateFromString:date_str];
NSDate *end_date = [dateFormatter dateFromString:date_str1];

NSCalendar *gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];
NSUInteger unitFlags =  NSDayCalendarUnit;
NSDateComponents *components = [gregorian components:unitFlags fromDate:starting_date toDate:end_date options:0];
NSInteger days = [components day];

该代码总计没有天数。

我如何获得此输出?

由于

4 个答案:

答案 0 :(得分:0)

我会继续使用我的代码,但是如果您提供的是您的日期格式,它会完成工作:

NSArray *begining_day = [date_str componentsSeparatedByString:@"/"];

NSMutableArray *part_days = [[NSMutableArray alloc] init];

for (int i = 0; i < days; i++) {

 [part_days addObject:([begining_day[0] integerValue] + i)];

}

现在part_days将有你的日子,但是!你必须处理每个月的结束。

我百分百肯定你会找到更好的解决方案,但我想我可以分享我想到的第一件事,你可能会从中受益。

答案 1 :(得分:0)

您可以尝试以下代码:

NSArray *array = [[NSArray alloc] initWithObjects:@"1/12/14",@"2/12/14",@"3/12/14",@"4/12/14",@"5/12/14", nil];
for (int i = 0; i < [array count]; i++) {
    NSArray *myArray = [[array objectAtIndex:i] componentsSeparatedByString:@"/"];
    [dayArray addObject:[myArray objectAtIndex:0]];

}
NSLog(@"%@",dayArray);

答案 2 :(得分:0)

继续你的代码并假设,

NSString *date_str=[NSString stringWithFormat:@"%@",@"December 21, 2013"];
NSString *date_str1=[NSString stringWithFormat:@"%@",@"December 28, 2013"];

如果您在同一个月内需要它,可以这样,

NSDateComponents *component1 = [gregorian components:unitFlags fromDate:starting_date];
NSDateComponents *component2 = [gregorian components:unitFlags fromDate:end_date];

    for (int i = component1.day; i <= component2.day; i++) {
        NSLog(@"%i", i);
    }

但是如果您的日期在不同月份之间扩展,那么您必须在循环中添加月份组件的检查。

答案 3 :(得分:0)

您可以逐渐向startDate添加24小时,直到通过endDate。使用NSDateComponents你可以挑选出一天。而不是使用NSLog记录它们只是将它们存储在字符串或数组中。

NSDate *startDate   = [NSDate dateWithTimeIntervalSinceReferenceDate:300000000];
NSDate *endDate     = [NSDate dateWithTimeIntervalSinceReferenceDate:302000000];

for (NSDate *nextDate = startDate; [nextDate compare:endDate] < 0; nextDate = [nextDate dateByAddingTimeInterval:24*60*60] ) {
    NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:nextDate];
    NSInteger day = [components day];
    NSLog(@"day %li", (long)day);
}