代码在日历中返回的天数不正确

时间:2015-09-30 10:29:37

标签: ios calendar nsdate

我正在制作一个用于练习目的的日历,我试图找到特定年份特定月份的天数。

我成功地找到了正确的价值,直到今天,突然间,我才在2月才得到正确的天数。它之前的工作正常,我没有对我的代码做任何改动。

我的代码:

-(NSDate *)startOfMonth:(NSInteger)calendarMonth :(NSInteger)calendarYear
{
    NSDate *date=[NSDate date];
    NSCalendar * calendar = [NSCalendar currentCalendar];

    NSDateComponents * comps = [calendar components: NSCalendarUnitYear | NSCalendarUnitMonth |NSCalendarUnitDay fromDate:date];

    [comps setMonth:calendarMonth];

    [comps setYear:calendarYear];

    NSDate * monthOnlyDate = [calendar dateFromComponents:comps];

    NSDateComponents * currentDateComponents = [calendar components:     NSCalendarUnitYear | NSCalendarUnitMonth fromDate:monthOnlyDate ];

    self.numberOfDays = [[NSCalendar currentCalendar] rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:monthOnlyDate].length ;

    NSLog(@"NUMBER OF DAYS==%li",(long)self.numberOfDays);

    NSDate * startOfAnyMonth = [calendar dateFromComponents: currentDateComponents];
    NSDateFormatter *weekDay = [[NSDateFormatter alloc] init];
    [weekDay setDateFormat:@"EEE"];
    NSString * currentDay =[NSString stringWithFormat:@"%@",[weekDay stringFromDate:startOfAnyMonth]];
    [self updateFirstDateOFCurrentMonth:currentDay];
    return startOfAnyMonth;
}

1 个答案:

答案 0 :(得分:0)

我猜测它几天前工作的原因并且今天2月没有工作的原因是2月没有第30天(今天是这样),而你#&# 39;根据当天重新创建日期对象,然后更改月份,而不检查日期。

但更重要的是,你的逻辑对我来说并不是很清楚 - 如果你想要的是获得指定月份的第一天,为什么不只是根据组件创建NSDate对象由用户指定,同时提供1作为日期组件的值?你在这里做的是创建一个基于今天的日期,更改组件,然后检查它们以获得您手动设置的值(因此已经知道)。

此外,如果这是出于练习目的,正如您所提到的,我强烈建议为方法声明的一部分提供所有参数的名称,否则调用它将不太可读。在这种情况下,我会考虑将方法名称更改为:

- (NSDate *)startOfMonth:(NSInteger)calendarMonth ofYear:(NSInteger)calendarYear

我希望这会有所帮助。祝你好运。