2010-03-30 36 views
22

làm cách nào để tôi có thể so sánh hai ngày trả về số ngày. Ví dụ: Thiếu ngày X của Cup. xem mã của tôi.Làm cách nào để so sánh hai ngày, trả về một số ngày

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

Bạn có thể kiểm tra câu trả lời này http://stackoverflow.com/questions/13236719/number-of-days-between-two-nsdate-objects giúp giải quyết vấn đề của tôi –

Trả lời

35

Từ Apple's example, về cơ bản sử dụng một 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 cũng sẽ cần thay đổi định dạng ngày thành @ "MM-dd-yyyy" . – DyingCactus

+0

Tôi đã bỏ lỡ lần đầu tiên. Đó có lẽ là lý do tại sao anh không nhận được những gì anh muốn. – darelf

3

Bạn có thể sử dụng loại tiếp theo:

@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

Đây là một cách tiếp cận thực sự sai. Sử dụng các phương pháp NSCalendar để thay thế. – Andrew

0

cần gọi phương thức này và thiết lập 2 ngày duy nhất mà chúng tôi muốn để tính toán khác nhau.

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

Hãy thử thể loại này:

@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 

Bạn có thể sử dụng loại này bằng cách thêm một nhập khẩu:

#import "NSDate+DateUtils.h" 

Và gọi nó từ mã của bạn:

NSInteger days = [myDate numberOfDaysUntilDay:someOtherDate];