Difference between two NSDate objects -- Result also a NSDate
Solution 1:
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);
Solution 2:
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.
Solution 3:
From NSDate
class reference, you have instance methods to do these -
- How to compare two NSDate variables? Ans:
isEqualToDate:
- How to find difference between two NSDate variables? Ans:
timeIntervalSinceDate:
- How to get each separate value of minute, hours and days from NSDate variable? links
Solution 4:
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.