按天比较两个 NSDate



我有两个NSDate对象,dateOnedateTwo。如果dateTwo晚于 dateone 但与dateOne在同一天(例如 2015 年 1 月 1 日下午 4:00 和 2015 年 1 月 1 日下午 5:00),那么我想返回它们是相同的。但是,一旦dateTwo在第二天或更晚(例如 2015 年 1 月 1 日和 2015 年 1 月 2 日),我想返回该dateOne <dateTwo。>

我目前正在尝试通过执行以下操作来实现此目的:

- (BOOL)dateTwoLaterThanDateOne:(NSDate *)dateOne withDateTwo:(NSDate *)dateTwo {
    if([dateTwo compare: dateOne] == NSOrderedDescending) // if dateTwo is later in time than dateOne
    {
        return YES;
    }
    return NO;
}

检查它是否与 NSDateComponents 是同一天。

如果不比较它们,看看它们是上升还是下降。

- (BOOL)dateTwoLaterThanDateOne:(NSDate *)dateOne withDateTwo:(NSDate *)dateTwo
{
    NSCalendar* calendar = [NSCalendar currentCalendar];
    unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;
    NSDateComponents* comp1 = [calendar components:unitFlags fromDate:dateOne];
    NSDateComponents* comp2 = [calendar components:unitFlags fromDate:dateTwo];
    BOOL sameDay = [comp1 day]  == [comp2 day] && [comp1 month] == [comp2 month] && [comp1 year]  == [comp2 year] ;
   return sameDay ? !sameDay : ([dateOne compare:dateTwo] == NSOrderedAscending);
}

您可以从每个组件中获取日期组件并进行比较。像这样:

NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate date]];
NSInteger day = [components day];

对两个日期都这样做,然后进行比较。

使用此代码。

NSTimeInterval secondsBetween = [dateTwo timeIntervalSinceDate: dateOne]; 
int numberOfDays = secondsBetween /(3600*24);
if (numberOfDays == 0) {
        NSLog(@"same day"); //dateOne = dateTwo
}else if (numberOfDays>0){
        NSLog(@"two > one"); //dateOne > dateTwo
}else if (numberOfDays<0){
        NSLog(@"two < one"); //dateOne < dateTwo
}

此代码可帮助您:)

最新更新