NSDate 比今天旧

NSDate is older than today

我知道如何比较两个 NSDate 对象,例如:

if ([olderDate compare:[NSDate date]] == NSOrderedAscending) {

    // do something

}

但是我只想比较日期部分,而不是时间,因为在我的情况下时间会使比较不准确。

是否可以只比较日月年?

您可以通过这种方式获取日期组件

NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:yourDate];

那你可以比较一下

NSInteger day = [components day];
NSInteger month = [components month];
NSInteger year = [components year];

你可以使用这个方法。

if ([olderDate timeIntervalSinceNow] > 0) {
  // do something
}

自 iOS 8 起,NSCalendar 有许多用于此类比较的便捷方法。

例如,有:

- (NSDate *)startOfDayForDate:(NSDate *)date NS_AVAILABLE(10_9, 8_0);

您可以从某个日期(例如 [NSDate date] 对应 "now")获取给定日期的开始时间,然后与该日期进行比较。

还有:

- (NSComparisonResult)compareDate:(NSDate *)date1 toDate:(NSDate *)date2 toUnitGranularity:(NSCalendarUnit)unit NS_AVAILABLE(10_9, 8_0);

您可以调用粒度 NSCalendarUnitDay 直接进行您想要的比较。

还有其他人。有关详细信息,请参阅 NSCalendar.h,因为这些方法似乎还没有出现在 class 参考文档中。