Reputation: 2206
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
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
Reputation: 102
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
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