For some reason, Apple didn’t provide an easy way to extract day, month and year from an NSDate. Probably because they think OS X shouldn’t be Western-centric and presume a Gregorian calendar (although they could have simply extracted this data from current locale). Here is a simple category that allows just that.
// NSDate+IVDateComponents.h #import@interface NSDate (IVDateComponents) @property (nonatomic, readonly) NSInteger year; @property (nonatomic, readonly) NSInteger month; @property (nonatomic, readonly) NSInteger day; @end
// NSDate+IVDateComponents.m
#import "NSDate+IVDateComponents.h"
@implementation NSDate (IVDateComponents)
-(NSInteger)year
{
unsigned units = NSYearCalendarUnit;
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [calendar components:units fromDate:self];
return [components year];
}
-(NSInteger)month
{
unsigned units = NSMonthCalendarUnit;
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [calendar components:units fromDate:self];
return [components month];
}
-(NSInteger)day
{
unsigned units = NSDayCalendarUnit;
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [calendar components:units fromDate:self];
return [components day];
}
@end
Note that this code is very Western-centric and always presumes the Gregorian calendar. Sue me.