【问题标题】:NSDate is older than todayNSDate 比今天更早
【发布时间】:2015-05-12 02:12:48
【问题描述】:

我了解如何比较两个 NSDate 对象,例如:

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

    // do something

}

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

是否可以只比较日、月和年?

【问题讨论】:

    标签: ios objective-c nsdate


    【解决方案1】:

    从 iOS 8 开始,NSCalendar 提供了许多方便的方法来进行此类比较。

    例如,有:

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

    您可以从某个日期(例如 [NSDate date] 表示“现在”)获取给定一天的开始,然后与之进行比较。

    还有:

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

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

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

    【讨论】:

    • - (NSComparisonResult)compareDate:(NSDate *)date1 toDate:(NSDate *)date2 toUnitGranularity:(NSCalendarUnit)unit NS_AVAILABLE(10_9, 8_0); 工作完美。谢谢!
    【解决方案2】:

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

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

    然后你可以比较

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

    【讨论】:

      【解决方案3】:

      你可以使用这个方法。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-17
        • 2011-05-02
        • 1970-01-01
        • 2017-05-20
        • 1970-01-01
        • 2023-03-11
        相关资源
        最近更新 更多