How to compare two dates, return the number of days

how can i compare the two return dates of the number of days. Example: Missing X days of the Cup. look at my code.

NSDateFormatter *df = [[NSDateFormatter alloc]init]; [df setDateFormat:@"d MMMM,yyyy"]; NSDate *date1 = [df dateFromString:@"11-05-2010"]; NSDate *date2 = [df dateFromString:@"11-06-2010"]; NSTimeInterval interval = [date2 timeIntervalSinceDate:date1]; //int days = (int)interval / 30; //int months = (interval - (months/30)) / 30; NSString *timeDiff = [NSString stringWithFormat:@"%dMissing%d days of the Cup",date1,date2, fabs(interval)]; label.text = timeDiff; // output (Missing X days of the Cup) 
+22
objective-c compare days
Mar 30 '10 at 19:18
source share
4 answers

From Apple's example , mainly use NSCalendar:

 NSDate * date1 = <however you initialize this>; NSDate * date2 = <...>; NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSUInteger unitFlags = NSMonthCalendarUnit | NSDayCalendarUnit; NSDateComponents *components = [gregorian components:unitFlags fromDate:date1 toDate:date2 options:0]; NSInteger months = [components month]; NSInteger days = [components day]; 
+35
Mar 30 '10 at 19:37
source share

You can use the following category:

 @interface NSDate (Additions) -(NSInteger)numberOfDaysUntilDay:(NSDate *)aDate; -(NSInteger)numberOfHoursUntilDay:(NSDate *)aDate; @end @implementation NSDate (Additions) const NSInteger secondPerMunite = 60; const NSInteger munitePerHour = 60; const NSInteger hourPerDay = 24; -(NSInteger)numberOfDaysUntilDay:(NSDate *)aDate { NSInteger selfTimeInterval = [aDate timeIntervalSinceDate:self]; return abs(selfTimeInterval / (secondPerMunite * munitePerHour * hourPerDay)); } -(NSInteger)numberOfHoursUntilDay:(NSDate *)aDate { NSInteger selfTimeInterval = [aDate timeIntervalSinceDate:self]; return abs(selfTimeInterval / (secondPerMunite * munitePerHour)); } @end 
+3
Jun. 07 2018-12-12T00:
source share

It is necessary to call this method and set only 2 dates, which we want to calculate in different ways.

 -(void) calculateSleepHours:(NSDate *)sleepDate :(NSDate *)wakeStr { if (sleepDate !=nil && wakeStr!=nil) {`enter code here` NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init]; [dateFormatter1 setDateFormat:@"yyyy-MM-dd HH:mm:ssZ"]; NSDate *date1 = [ApplicationManager getInstance].sleepTime;; NSDate *date2 = [ApplicationManager getInstance].wakeupTime; NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSUInteger unitFlags = NSMonthCalendarUnit | NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit; NSDateComponents *components = [gregorian components:unitFlags fromDate:date1 toDate:date2 options:0]; NSInteger months = [components month]; NSInteger days = [components day]; NSInteger hours = [components hour]; NSInteger minute=[components minute]; NSInteger second=[components second]; DLog(@"Month %ld day %ld hour is %ld min %ld sec %ld ",(long)months,(long)days,(long)hours,(long)minute,(long)second); sleepHours.text=[NSString stringWithFormat:@"Hour %ld Min %ld Sec %ld",(long)hours,(long)minute,(long)second]; } } 
0
Mar 06 '14 at 13:12
source share

Try this category:

 @interface NSDate (DateUtils) -(NSInteger)numberOfDaysUntilDay:(NSDate *)aDate; @end @implementation NSDate (DateUtils) -(NSInteger)numberOfDaysUntilDay:(NSDate *)aDate { NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; NSDateComponents *components = [calendar components:NSCalendarUnitDay fromDate:self toDate:aDate options:kNilOptions]; return [components day]; } @end 

You can use this category by adding import:

 #import "NSDate+DateUtils.h" 

And call it from your code:

 NSInteger days = [myDate numberOfDaysUntilDay:someOtherDate]; 
0
Apr 10 '15 at 16:51
source share



All Articles