Skip to content

Commit

Permalink
Adds a daysAgoAgainstMidnight calculation
Browse files Browse the repository at this point in the history
Uses daysAgoAgainstMidnight for calculating stringDaysAgo
  • Loading branch information
billymeltdown committed Mar 26, 2009
1 parent 0912d1e commit eaabcaa
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 16 deletions.
6 changes: 4 additions & 2 deletions NSDate+Helper.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,15 @@

@interface NSDate (Helper)

- (NSInteger)daysAgo;
- (NSUInteger)daysAgo;
- (NSUInteger)daysAgoAgainstMidnight;
- (NSString *)stringDaysAgo;
- (NSString *)stringDaysAgoAgainstMidnight:(BOOL)flag;

+ (NSString *)dbFormatString;
+ (NSDate *)dateFromString:(NSString *)string;
+ (NSString *)stringFromDate:(NSDate *)date withFormat:(NSString *)string;
+ (NSString *)stringFromDate:(NSDate *)date;
+ (NSString *)stringForDisplayFromDate:(NSDate *)date;

@end
@end
46 changes: 32 additions & 14 deletions NSDate+Helper.m
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,11 @@

@implementation NSDate (Helper)

- (NSInteger)daysAgo {
/*
* This guy can be a little unreliable and produce unexpected results,
* you're better off using daysAgoAgainstMidnight
*/
- (NSUInteger)daysAgo {
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:(NSDayCalendarUnit)
fromDate:self
Expand All @@ -19,8 +23,22 @@ - (NSInteger)daysAgo {
return [components day];
}

- (NSUInteger)daysAgoAgainstMidnight {
// get a midnight version of ourself:
NSDateFormatter *mdf = [[NSDateFormatter alloc] init];
[mdf setDateFormat:@"yyyy-MM-dd"];
NSDate *midnight = [mdf dateFromString:[mdf stringFromDate:self]];
[mdf release];

return (int)[midnight timeIntervalSinceNow] / (60*60*24) *-1;
}

- (NSString *)stringDaysAgo {
NSInteger daysAgo = [self daysAgo];
return [self stringDaysAgoAgainstMidnight:YES];
}

- (NSString *)stringDaysAgoAgainstMidnight:(BOOL)flag {
NSUInteger daysAgo = (flag) ? [self daysAgoAgainstMidnight] : [self daysAgo];
NSString *text = nil;
switch (daysAgo) {
case 0:
Expand Down Expand Up @@ -61,19 +79,19 @@ + (NSString *)stringFromDate:(NSDate *)date {

+ (NSString *)stringForDisplayFromDate:(NSDate *)date {
/*
* if the date is in today, display 12-hour time with meridian,
* if it is within the last 7 days, display weekday name (Friday)
* if within the calendar year, display as Jan 23
* else display as Nov 11, 2008
*/

* if the date is in today, display 12-hour time with meridian,
* if it is within the last 7 days, display weekday name (Friday)
* if within the calendar year, display as Jan 23
* else display as Nov 11, 2008
*/
NSDate *today = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *offsetComponents = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit)
fromDate:today];

fromDate:today];
NSDate *midnight = [calendar dateFromComponents:offsetComponents];

NSDateFormatter *displayFormatter = [[NSDateFormatter alloc] init];

// comparing against midnight
Expand All @@ -90,7 +108,7 @@ + (NSString *)stringForDisplayFromDate:(NSDate *)date {
} else {
// check if same calendar year
NSInteger thisYear = [offsetComponents year];

NSDateComponents *dateComponents = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit)
fromDate:date];
NSInteger thatYear = [dateComponents year];
Expand All @@ -101,9 +119,9 @@ + (NSString *)stringForDisplayFromDate:(NSDate *)date {
}
}
}

// use display formatter to return formatted date string
return [displayFormatter stringFromDate:date];
}

@end
@end

0 comments on commit eaabcaa

Please sign in to comment.