【问题标题】:How to show current and previous 6 Months with Year in iOS?如何在 iOS 中使用年份显示当前和以前的 6 个月?
【发布时间】:2014-08-06 05:45:53
【问题描述】:

我在一个项目中工作,我需要显示当前和过去 6 个月的年份。我正在使用下面的代码来执行此操作。

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

    NSString *index=[NSString stringWithFormat:@"%d",i+1];

    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *comps = [NSDateComponents new];
    comps.month = - (i+1);
    NSDate *date = [calendar dateByAddingComponents:comps toDate:[NSDate date] options:0];
    NSDateComponents *components = [calendar components:NSMonthCalendarUnit|NSYearCalendarUnit fromDate:date]; // Get necessary date 


    currentYear  = [components year];
    currentmonth=[components month];
    yearstring = [[NSString alloc]initWithFormat:@"%ld",currentYear];
    yearstring=[yearstring substringFromIndex:MAX((int)[yearstring length]-2, 0)];
    monthName = [[df monthSymbols] objectAtIndex:(currentmonth-1 )];
    NSString *string=[NSString stringWithFormat:@"%@, %@",monthName,yearstring];
    }

此代码适用于所有月份。但是当我将当前月份设置为一月/二月时。然后它确实给出了数组范围的错误。 请指教

【问题讨论】:

    标签: ios iphone nsdate nsdateformatter nscalendar


    【解决方案1】:

    您的问题是,当您为 currentMonth of 1 调用 [[df monthSymbols] objectAtIndex:(currentmonth-1 )]; 时,您最终会得到一个无效的月份编号。实现您所追求的更简单的代码是 -

    int numberOfMonths=6;
    
    NSDateFormatter *formatter=[[NSDateFormatter alloc]init];
    [formatter setDateFormat:@"MMMM, YY" ];
    
    NSCalendar *calendar = [NSCalendar currentCalendar];
    
    NSDate *now=[NSDate date];
    
    NSDateComponents *comps = [NSDateComponents new];
    
    for (int i=-numberOfMonths; i< 1; i++) {
    
        comps.month = i;
        NSDate *newDate = [calendar dateByAddingComponents:comps toDate:now options:0];
    
        NSString *string=[formatter stringFromDate:newDate];
        NSLog(@"date=%@",string);
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用NSDateFormatterNSDate 中获取年份和月份字符串。没有必要做所有这些马戏团。检查我的代码,这是你想要的吗?

        for (int i=0; i< 6; i++) {
      
          NSCalendar *calendar = [NSCalendar currentCalendar];
          NSDateComponents *comps = [NSDateComponents new];
          comps.month = - (i+1);
          NSDate *date = [calendar dateByAddingComponents:comps toDate:[NSDate date] options:0];
          NSDateComponents *components = [calendar components:NSMonthCalendarUnit|NSYearCalendarUnit fromDate:date]; // Get necessary date
      
          NSDateFormatter *df = [NSDateFormatter new];
          [df setDateFormat:@"MMMM, yy"];
          NSString *dateString = [df stringFromDate:date];
              NSLog(@"%@ ",dateString);
      }
      

      【讨论】:

        猜你喜欢
        • 2012-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-01
        • 2011-07-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多