2010-03-30 2 views
22

Wie kann ich zwei Daten vergleichen Anzahl der Tage zurückgeben. Ex: Fehlende X Tage des Cups. schauen Sie sich meinen Code an.Wie kann ich zwei Daten vergleichen, eine Anzahl von Tagen zurückgeben

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) 
+0

Sie können Überprüfen Sie diese Antwort http://stackoverflow.com/questions/13236719/number-of-days-between-two-nsdate-objects es half, mein Problem zu lösen –

Antwort

35

Von Apple's example, verwenden im Grunde ein 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]; 
+0

OP muss auch das Datumsformat zu @ "MM-dd-yyyy" ändern . – DyingCactus

+0

Das habe ich das erste Mal vermisst. Wahrscheinlich hat er deshalb nicht bekommen, was er wollte. – darelf

3

Sie nächste Kategorie verwenden:

@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 
+4

Das ist ein wirklich falscher Ansatz. Verwenden Sie stattdessen die NSCalendar-Methoden. – Andrew

0

müssen diese Methode aufrufen und einstellen 2 Tage, nur die wir berechnen wollen anders.

-(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

Versuchen Sie, diese Kategorie:

@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 

Sie diese Kategorie durch Hinzufügen eines Import verwenden:

#import "NSDate+DateUtils.h" 

Und es aus dem Code aufrufen:

NSInteger days = [myDate numberOfDaysUntilDay:someOtherDate];