inVINCEable
inVINCEable

Reputation: 2206

Getting the number of days of the month in NSDate in Objective-C?

So i've been trying to find the last day of the month in an int but the code I'm using always thinks the last day is 30

Last Day is January

the code i am using looks like this

NSDate *curDate = [NSDate date];
    NSCalendar* calendar = [NSCalendar currentCalendar];
    NSDateComponents* compsd = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSWeekdayCalendarUnit fromDate:curDate]; // Get necessary date components

    // set last of month
    [compsd setMonth:[compsd month]+1];
    [compsd setDay:0];
    NSDate *tDateMonth = [calendar dateFromComponents:compsd];
    //NSLog(@"%@", tDateMonth);

    //[comps setMonth:[comps month]+1];
    //[comps setDay:0];
   // NSDate *tDateMonth = [cal dateFromComponents:comps];
    //NSLog(@"%@", tDateMonth);
     //*/

    NSString *tDateString = [NSString stringWithFormat:@"%@", tDateMonth];
    NSString *dateNTime = [[tDateString componentsSeparatedByString:@"-"] objectAtIndex:2];
    int justDate = [[[dateNTime componentsSeparatedByString:@" "] objectAtIndex:0] intValue];
    NSLog(@"Last Day of %@ is %d", monthName, justDate);

What am I missing?

Upvotes: 0

Views: 2548

Answers (2)

I guess you can try something like this

NSDate *currentDate = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSWeekdayCalendarUnit fromDate:currentDate];

[components setMonth:[components month]+1];
[components setDay:0];
NSDate *theDate = [calendar dateFromComponents:components];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"d"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

NSString *dateString = [dateFormatter stringFromDate:theDate];
NSInteger dateInt = [dateString intValue];
NSLog(@"The int: %i", dateInt);

Upvotes: 0

Fry
Fry

Reputation: 6275

Try this simple way:

NSCalendar *cal = [NSCalendar currentCalendar];
NSRange rng = [cal rangeOfUnit:NSDayCalendarUnit 
                        inUnit:NSMonthCalendarUnit
                       forDate:[NSDate date]];
NSUInteger numberOfDaysInMonth = rng.length;

Upvotes: 4

Related Questions