Skip to content

Instantly share code, notes, and snippets.

@ckrissun
Last active January 3, 2016 09:24
Show Gist options
  • Save ckrissun/f2f4604951c96b014f38 to your computer and use it in GitHub Desktop.
Save ckrissun/f2f4604951c96b014f38 to your computer and use it in GitHub Desktop.
ios: get days between two timestamps
#import "TimeUtils.h"
/*
//TimeUtils.h
#import <Foundation/Foundation.h>
@interface TimeUtils : NSObject
+ (NSInteger)numberOfDaysByDate:(NSDate *)startDate endDate:(NSDate *)endDate;
+ (NSInteger)numberOfDaysByTimestamp:(NSTimeInterval)startTimestamp endTimeStamp:(NSTimeInterval)endTimestamp;
@end
*/
@implementation TimeUtils
static NSInteger const secondsOfOneday = 24*3600;
+ (NSInteger) numberOfDaysByTimestamp:(NSTimeInterval)startTimestamp endTimeStamp:(NSTimeInterval)endTimestamp {
NSTimeZone *timeZone = [NSTimeZone systemTimeZone];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setTimeZone:timeZone];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate *endDate = [NSDate dateWithTimeIntervalSince1970:endTimestamp];
NSDate *zeroClockOfEndDate = [dateFormatter dateFromString:[dateFormatter stringFromDate:endDate]];
NSInteger zeroTimestampOfEndDate = [zeroClockOfEndDate timeIntervalSince1970];
NSDate *startDate = [NSDate dateWithTimeIntervalSince1970:startTimestamp];
NSDate *zeroClockOfStartDate = [dateFormatter dateFromString:[dateFormatter stringFromDate:startDate]];
NSInteger zeroTimestampOfStartDate = [zeroClockOfStartDate timeIntervalSince1970];
return (zeroTimestampOfEndDate - zeroTimestampOfStartDate) / secondsOfOneday;
}
+ (NSInteger) numberOfDaysByDate:(NSDate *)startDate endDate:(NSDate *)endDate {
NSInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *comps = [cal components:unitFlags fromDate:startDate];
NSDate *newBegin = [cal dateFromComponents:comps];
comps = [cal components:unitFlags fromDate:endDate];
NSDate *newEnd = [cal dateFromComponents:comps];
NSTimeInterval interval = [newEnd timeIntervalSinceDate:newBegin];
return ((NSInteger)interval)/(3600*24);
}
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment