diff --git a/Classes/NSDate+ObjectiveSugar.h b/Classes/NSDate+ObjectiveSugar.h new file mode 100755 index 0000000..6b5de38 --- /dev/null +++ b/Classes/NSDate+ObjectiveSugar.h @@ -0,0 +1,60 @@ +// +// NSDate+ObjectiveSugar.h +// Objective Sugar +// +// Created by Casey Borders on 4/9/15. +// + +// For an overview see http://cocoadocs.org/docsets/ObjectiveSugar/ + +@interface NSDate (ObjectiveSugar) + +- (NSInteger)year; +- (NSInteger)month; +- (NSInteger)day; +- (NSInteger)hours; +- (NSInteger)minutes; +- (NSInteger)seconds; +- (NSInteger)weekOfYear; +- (NSInteger)weekOfMonth; +- (NSInteger)dayOfYear; +- (NSInteger)dayOfWeek; +- (NSDateComponents *)components; + +- (BOOL)isAfter:(NSDate *)date; +- (BOOL)isBefore:(NSDate *)date; +- (BOOL)isOnOrAfter:(NSDate *)date; +- (BOOL)isOnOrBefore:(NSDate *)date; +- (BOOL)isInSameYear:(NSDate *)date; +- (BOOL)isInSameMonth:(NSDate *)date; +- (BOOL)isInSameWeek:(NSDate *)date; +- (BOOL)isOnSameDay:(NSDate *)date; +- (BOOL)isInSameHour:(NSDate *)date; + +- (BOOL)isBetween:(NSDate *)date1 and:(NSDate *)date2; + +- (BOOL)isAtLeast:(NSNumber *)time from:(NSDate *)date; +- (BOOL)isMoreThan:(NSNumber *)time from:(NSDate *)date; +- (BOOL)isLessThan:(NSNumber *)time from:(NSDate *)date; + +- (BOOL)isAtLeast:(NSNumber *)time before:(NSDate *)date; +- (BOOL)isMoreThan:(NSNumber *)time before:(NSDate *)date; +- (BOOL)isLessThan:(NSNumber *)time before:(NSDate *)date; + +- (BOOL)isAtLeast:(NSNumber *)time after:(NSDate *)date; +- (BOOL)isMoreThan:(NSNumber *)time after:(NSDate *)date; +- (BOOL)isLessThan:(NSNumber *)time after:(NSDate *)date; + +- (NSInteger)yearsUntil:(NSDate *)date; +- (NSInteger)monthsUntil:(NSDate *)date; +- (NSInteger)daysUntil:(NSDate *)date; +- (NSInteger)hoursUntil:(NSDate *)date; +- (NSInteger)secondsUntil:(NSDate *)date; + +- (NSInteger)yearsSince:(NSDate *)date; +- (NSInteger)monthsSince:(NSDate *)date; +- (NSInteger)daysSince:(NSDate *)date; +- (NSInteger)hoursSince:(NSDate *)date; +- (NSInteger)secondsSince:(NSDate *)date; + +@end diff --git a/Classes/NSDate+ObjectiveSugar.m b/Classes/NSDate+ObjectiveSugar.m new file mode 100755 index 0000000..3d51a7f --- /dev/null +++ b/Classes/NSDate+ObjectiveSugar.m @@ -0,0 +1,316 @@ +// +// NSDate+ObjectiveSugar.h +// Objective Sugar +// +// Created by Casey Borders on 4/9/15. +// + +#import "NSDate+ObjectiveSugar.h" +#import "NSNumber+ObjectiveSugar.h" + + +@implementation NSDate (ObjectiveSugar) + +- (NSInteger)year +{ + NSCalendar *gregorian = [self gregorianUTCCalendar]; + NSDateComponents *components = [gregorian components:NSCalendarUnitYear fromDate:self]; + NSInteger year = [components year]; + return year; +} + +- (NSInteger)month +{ + NSCalendar *gregorian = [self gregorianUTCCalendar]; + NSDateComponents *components = [gregorian components:NSCalendarUnitMonth fromDate:self]; + NSInteger month = [components month]; + return month; +} + +- (NSInteger)day +{ + NSCalendar *gregorian = [self gregorianUTCCalendar]; + gregorian.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"]; + NSDateComponents *components = [gregorian components:NSCalendarUnitDay fromDate:self]; + NSInteger day = [components day]; + return day; +} + +- (NSInteger)hours +{ + NSCalendar *gregorian = [self gregorianUTCCalendar]; + NSDateComponents *components = [gregorian components:NSCalendarUnitHour fromDate:self]; + NSInteger hours = [components hour]; + return hours; +} + +- (NSInteger)minutes +{ + NSCalendar *gregorian = [self gregorianUTCCalendar]; + NSDateComponents *components = [gregorian components:NSCalendarUnitMinute fromDate:self]; + NSInteger minutes = [components minute]; + return minutes; +} + +- (NSInteger)seconds +{ + NSCalendar *gregorian = [self gregorianUTCCalendar]; + NSDateComponents *components = [gregorian components:NSCalendarUnitSecond fromDate:self]; + NSInteger seconds = [components second]; + return seconds; +} + +- (NSInteger)weekOfYear +{ + NSCalendar *gregorian = [self gregorianUTCCalendar]; + NSDateComponents *components = [gregorian components:NSCalendarUnitWeekOfYear fromDate:self]; + NSInteger weekOfYear = [components weekOfYear]; + return weekOfYear; +} + +- (NSInteger)weekOfMonth +{ + NSCalendar *gregorian = [self gregorianUTCCalendar]; + NSDateComponents *components = [gregorian components:NSCalendarUnitWeekOfMonth fromDate:self]; + NSInteger weekOfMonth = [components weekOfMonth]; + return weekOfMonth; +} + +- (NSInteger)dayOfYear +{ + NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; + NSUInteger dayOfYear = [gregorian ordinalityOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitYear forDate:self]; + return dayOfYear; +} + +- (NSInteger)dayOfWeek +{ + NSCalendar *gregorian = [self gregorianUTCCalendar]; + NSDateComponents *components = [gregorian components:NSCalendarUnitWeekday fromDate:self]; + NSInteger dayOfWeek = [components weekday]; + return dayOfWeek; +} + +- (NSDateComponents *)components +{ + NSCalendarUnit units = NSCalendarUnitEra | NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond | NSCalendarUnitWeekday | NSCalendarUnitWeekdayOrdinal | NSCalendarUnitQuarter | NSCalendarUnitWeekOfMonth | NSCalendarUnitWeekOfYear | NSCalendarUnitYearForWeekOfYear | NSCalendarUnitNanosecond | NSCalendarUnitCalendar | NSCalendarUnitTimeZone; + + NSCalendar *gregorian = [self gregorianUTCCalendar]; + NSDateComponents *components = [gregorian components:units fromDate:self]; + return components; +} + +- (BOOL)isAfter:(NSDate *)date +{ + BOOL isAfter = [self compare:date] == NSOrderedDescending; + return isAfter; +} + +- (BOOL)isBefore:(NSDate *)date +{ + BOOL isBefore = [self compare:date] == NSOrderedAscending; + return isBefore; +} + +- (BOOL)isOnOrAfter:(NSDate *)date +{ + BOOL isOnOrAfter = [self compare:date] == NSOrderedDescending || [date compare:self] == NSOrderedSame; + return isOnOrAfter; +} + +- (BOOL)isOnOrBefore:(NSDate *)date +{ + BOOL isOnOrBefore = [self compare:date] == NSOrderedAscending || [self compare:date] == NSOrderedSame; + return isOnOrBefore; +} + +- (BOOL)isInSameYear:(NSDate *)date +{ + BOOL sameYear = [self year] == [date year]; + return sameYear; +} + +- (BOOL)isInSameMonth:(NSDate *)date +{ + BOOL sameMonth = [self isInSameYear:date] && + [self month] == [date month]; + return sameMonth; +} + +- (BOOL)isInSameWeek:(NSDate *)date +{ + BOOL sameWeek = [self isInSameMonth:date] && + [self weekOfMonth] == [date weekOfMonth]; + return sameWeek; +} + +- (BOOL)isOnSameDay:(NSDate *)date +{ + BOOL sameDay = [self isInSameMonth:date] && + [self day] == [date day]; + return sameDay; +} + +- (BOOL)isInSameHour:(NSDate *)date +{ + BOOL sameHour = [self isOnSameDay:date] && + [self hours] == [date hours]; + return sameHour; +} + +- (BOOL)isBetween:(NSDate *)date1 and:(NSDate *)date2 +{ + BOOL isBetweenDates = ([self isOnOrAfter:date1] && [self isOnOrBefore:date2]) || + ([self isOnOrAfter:date2] && [self isOnOrBefore:date1]); + + return isBetweenDates; +} + +- (BOOL)isAtLeast:(NSNumber *)time from:(NSDate *)date +{ + BOOL atLeast = [self isOnOrBefore:[time until:date]] || + [self isOnOrAfter:[time since:date]]; + return atLeast; +} + +- (BOOL)isMoreThan:(NSNumber *)time from:(NSDate *)date +{ + BOOL moreThan = [self isBefore:[time until:date]] || + [self isAfter:[time since:date]]; + return moreThan; +} + +- (BOOL)isLessThan:(NSNumber *)time from:(NSDate *)date +{ + BOOL lessThan = [self isOnOrAfter:[time until:date]] && + [self isOnOrBefore:[time since:date]]; + return lessThan; +} + +- (BOOL)isAtLeast:(NSNumber *)time before:(NSDate *)date +{ + BOOL before = [self isOnOrBefore:[time until:date]]; + return before; +} + +- (BOOL)isMoreThan:(NSNumber *)time before:(NSDate *)date +{ + BOOL before = [self isBefore:[time until:date]]; + return before; +} + +- (BOOL)isLessThan:(NSNumber *)time before:(NSDate *)date +{ + BOOL after = [self isAfter:[time until:date]] && + ![self isAfter:date]; + return after; +} + +- (BOOL)isAtLeast:(NSNumber *)time after:(NSDate *)date +{ + BOOL after = [self isOnOrAfter:[time since:date]]; + return after; +} + +- (BOOL)isMoreThan:(NSNumber *)time after:(NSDate *)date +{ + BOOL after = [self isAfter:[time since:date]]; + return after; +} + +- (BOOL)isLessThan:(NSNumber *)time after:(NSDate *)date +{ + BOOL before = [self isBefore:[time since:date]] && + ![self isBefore:date]; + return before; +} + +- (NSInteger)yearsUntil:(NSDate *)date +{ + NSCalendar *gregorian = [self gregorianUTCCalendar]; + NSDateComponents *components = [gregorian components:NSCalendarUnitYear fromDate:self toDate:date options:0]; + NSInteger years = [components year]; + return years; +} + +- (NSInteger)monthsUntil:(NSDate *)date +{ + NSCalendar *gregorian = [self gregorianUTCCalendar]; + NSDateComponents *components = [gregorian components:NSCalendarUnitMonth fromDate:self toDate:date options:0]; + NSInteger months = [components month]; + return months; +} + +- (NSInteger)daysUntil:(NSDate *)date +{ + NSCalendar *gregorian = [self gregorianUTCCalendar]; + NSDateComponents *components = [gregorian components:NSCalendarUnitDay fromDate:self toDate:date options:0]; + NSInteger days = [components day]; + return days; +} + +- (NSInteger)hoursUntil:(NSDate *)date +{ + NSCalendar *gregorian = [self gregorianUTCCalendar]; + NSDateComponents *components = [gregorian components:NSCalendarUnitHour fromDate:self toDate:date options:0]; + NSInteger hours = [components hour]; + return hours; +} + +- (NSInteger)secondsUntil:(NSDate *)date +{ + NSCalendar *gregorian = [self gregorianUTCCalendar]; + NSDateComponents *components = [gregorian components:NSCalendarUnitSecond fromDate:self toDate:date options:0]; + NSInteger seconds = [components second]; + return seconds; +} + +- (NSInteger)yearsSince:(NSDate *)date +{ + NSCalendar *gregorian = [self gregorianUTCCalendar]; + NSDateComponents *components = [gregorian components:NSCalendarUnitYear fromDate:date toDate:self options:0]; + NSInteger years = [components year]; + return years; +} + +- (NSInteger)monthsSince:(NSDate *)date +{ + NSCalendar *gregorian = [self gregorianUTCCalendar]; + NSDateComponents *components = [gregorian components:NSCalendarUnitMonth fromDate:date toDate:self options:0]; + NSInteger months = [components month]; + return months; +} + +- (NSInteger)daysSince:(NSDate *)date +{ + NSCalendar *gregorian = [self gregorianUTCCalendar]; + NSDateComponents *components = [gregorian components:NSCalendarUnitDay fromDate:date toDate:self options:0]; + NSInteger days = [components day]; + return days; +} + +- (NSInteger)hoursSince:(NSDate *)date +{ + NSCalendar *gregorian = [self gregorianUTCCalendar]; + NSDateComponents *components = [gregorian components:NSCalendarUnitHour fromDate:date toDate:self options:0]; + NSInteger hours = [components hour]; + return hours; +} + +- (NSInteger)secondsSince:(NSDate *)date +{ + NSCalendar *gregorian = [self gregorianUTCCalendar]; + NSDateComponents *components = [gregorian components:NSCalendarUnitSecond fromDate:date toDate:self options:0]; + NSInteger seconds = [components second]; + return seconds; +} + +- (NSCalendar *)gregorianUTCCalendar +{ + NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; + gregorian.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"]; + + return gregorian; +} + +@end diff --git a/Classes/ObjectiveSugar.h b/Classes/ObjectiveSugar.h index e5bc2a6..0c59185 100644 --- a/Classes/ObjectiveSugar.h +++ b/Classes/ObjectiveSugar.h @@ -9,3 +9,4 @@ #import "NSDictionary+ObjectiveSugar.h" #import "NSSet+ObjectiveSugar.h" #import "NSString+ObjectiveSugar.h" +#import "NSDate+ObjectiveSugar.h" \ No newline at end of file