Skip to content
This repository was archived by the owner on Dec 12, 2018. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 60 additions & 0 deletions Classes/NSDate+ObjectiveSugar.h
Original file line number Diff line number Diff line change
@@ -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
316 changes: 316 additions & 0 deletions Classes/NSDate+ObjectiveSugar.m
Original file line number Diff line number Diff line change
@@ -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
1 change: 1 addition & 0 deletions Classes/ObjectiveSugar.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@
#import "NSDictionary+ObjectiveSugar.h"
#import "NSSet+ObjectiveSugar.h"
#import "NSString+ObjectiveSugar.h"
#import "NSDate+ObjectiveSugar.h"