我希望从日期间隔中获取日期部分。 例如,我的日期间隔为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];
该代码总计没有天数。
我如何获得此输出?
由于
答案 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);
}