Difference between two NSDate objects — Result also a NSDate

后端 未结 5 1001
礼貌的吻别
礼貌的吻别 2020-11-30 20:38

I have two NSDate objects and I want the difference between the two and the result should again be a NSDate object. Any idea how to achieve this?

Here, I am trying t

相关标签:
5条回答
  • 2020-11-30 20:52

    NSDate represents an instance in time, so it doesn't make sense to represent an interval of time as an NSDate. What you want is NSDateComponents:

    NSDate *dateA;
    NSDate *dateB;
    
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
    NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay
                                               fromDate:dateA
                                                 toDate:dateB
                                                options:0];
    
    NSLog(@"Difference in date components: %i/%i/%i", components.day, components.month, components.year);
    
    0 讨论(0)
  • 2020-11-30 20:54

    You can calculate the time interval between two dates using NSDate's timeIntervalSinceDate:, but it doesn't make any sense for you to represent a time interval as a date.

    0 讨论(0)
  • 2020-11-30 20:55

    There is a easy way by using -compare: in NSDate:

    NSDate *dateA = [NSDate dateWithTimeIntervalSinceNow:100];
    NSDate *dateB = [NSDate dateWithTimeIntervalSinceNow:200];
    NSDate *myDate = [NSDate dateWithTimeIntervalSinceNow:150];
    NSArray *dateArray = [NSArray arrayWithObjects:dateA, dateB, myDate, nil];
    NSArray *sortedArray = [dateArray sortedArrayUsingSelector:@selector(compare:)];
    if ([myDate isEqualToDate:[sortedArray objectAtIndex:1]])
        NSLog(@"myDatea between dateA and dateB");
    
    0 讨论(0)
  • 2020-11-30 20:58

    If you subtract 12/12/2001 from 05/05/2002 what will be the date? The chronological distance between two dates can't be a date, it's alway some kind of interval. You can use timeIntervalSinceDate: to calculate the interval.

    To localize you can try the following steps:

    • You can use the NSCalendar with dateFromComponents: passing in a NSDateComponents.

    • To break down a timeInterval into NSDateComponents look at How do I break down an NSTimeInterval into year, months, days, hours, minutes and seconds on iPhone?.

    • Finally use the NSDateFormatter and initWithDateFormat:allowNaturalLanguage: to get your localized string. The Date Format String Syntax shows the different placeholders.

    0 讨论(0)
  • 2020-11-30 21:04

    From NSDate class reference, you have instance methods to do these -

    1. How to compare two NSDate variables? Ans: isEqualToDate:
    2. How to find difference between two NSDate variables? Ans: timeIntervalSinceDate:
    3. How to get each separate value of minute, hours and days from NSDate variable? links
    0 讨论(0)
提交回复
热议问题