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

Code is returning an incorrect number of days in calendar

我正在为练习目的制作日历,我正在尝试查找特定年份的特定月份的天数。

直到今天我都成功地找到了正确的值,突然间我只得到了 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;
}

我猜它几天前工作而今天 2 月不工作的原因是 2 月没有第 30 天(今天),而你正在创建日期对象基于当前日期,然后更改月份,而不检查日期。

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

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

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

希望对您有所帮助。祝你好运。