メッセージの受信者はelapsedDays
メソッドself
実装スコープ内にあります。
例えば:
#import <Foundation/Foundation.h>
@interface NSDate (ElapsedDays)
- (NSInteger)elapsedDaysSinceDate:(NSDate *)theDate;
@end
@implementation NSDate (ElapsedDays)
static const NSInteger SecondsPerDay = 86400;
- (NSInteger)elapsedDaysSinceDate:(NSDate *)theDate {
NSTimeInterval interval = [self timeIntervalSinceDate:theDate];
return interval/SecondsPerDay;
}
@end
int main(int argc, char *argv[]) {
@autoreleasepool {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MMddyyyy"];
NSDate *date1 = [dateFormatter dateFromString:@"01012012"];
NSDate *date2 = [dateFormatter dateFromString:@"12312012"];
printf("Date difference = %ld",[date2 elapsedDaysSinceDate:date1]);
}
}
コンソールDate difference = 365
に出力します。
編集 (グレゴリオ暦の計算を使用)
#import <Foundation/Foundation.h>
@interface NSDate (ElapsedDays)
- (NSInteger)elapsedDaysSinceDate:(NSDate *)theDate;
@end
@implementation NSDate (ElapsedDays)
- (NSInteger)elapsedDaysSinceDate:(NSDate *)theDate {
NSTimeInterval interval = [self timeIntervalSinceDate:theDate];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [gregorian components:NSDayCalendarUnit
fromDate:theDate
toDate:self
options:0];
return [components day];
}
@end
int main(int argc, char *argv[]) {
@autoreleasepool {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MMddyyyy"];
NSDate *date1 = [dateFormatter dateFromString:@"01012012"];
NSDate *date2 = [dateFormatter dateFromString:@"12312012"];
printf("Date difference = %ld",[date2 elapsedDaysSinceDate:date1]);
}
}