Question

I am trying to calculate number of days in current month

      today = [NSDate date];

    NSLog(@"%@", today);

    //calculate how much days in current month

    NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSRange days = [cal rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:today];
    NSUInteger numberOfDaysInMonth = days.length;

    NSLog(@"%d Days in month:%i", numberOfDaysInMonth, NSMonthCalendarUnit);

   // end calculating

In log it shows August month instead of May

Why it happens? What I missed?

Thanks

2013-05-07 21:39:01.344 NsTimer[89023:c07] 2013-05-07 18:39:01 +0000 2013-05-07 21:39:01.345 NsTimer[89023:c07] 31 Days in month:8

ANSWER:

Thanks @artur

This is a right code

    today = [NSDate date];

    NSLog(@"%@", today);

    //calculate how much days in current month

    NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    int units = NSMonthCalendarUnit;
    NSDateComponents *comps = [cal components:units fromDate:today];
    NSRange days = [cal rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:today];
    NSUInteger numberOfDaysInMonth = days.length;

    NSLog(@"%d Days in month:%i", numberOfDaysInMonth, comps.month);

   // end calculating

Log now shows:

2013-05-07 22:25:04.855 NsTimer[89623:c07] 2013-05-07 19:25:04 +0000
2013-05-07 22:25:04.856 NsTimer[89623:c07] 31 Days in month:5
Was it helpful?

Solution

You log NSMonthCalendarUnit as integer (%i). It is just enum flag value, accidentally 8. To show month number, you should extract it with [[calendar components:NSMonthCalendarUnit fromDate:today] month].

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top