Comparing the time of two NSDates, ignoring the date component

后端 未结 3 464
孤独总比滥情好
孤独总比滥情好 2020-12-06 02:03

I want to compare two NSDates with NOW ([NSDate date]).

NSDate *date1 = [NSDate dateWithString:@\"1982-02-12 07:00:00 +0100\"];
NSDate *now   = [NSDate dateW         


        
相关标签:
3条回答
  • 2020-12-06 02:17
        NSDateFormatter* formatterDate = [[[NSDateFormatter alloc] init] autorelease]; 
    
        formatterDate.dateStyle = NSDateFormatterMediumStyle;  // whatever format you like  
    
        NSDate *first_Date  = [formatterDate dateFromString:@""];
        NSDate  *second_Date  = [formatterDate dateFromString:@""];
        NSDate  *todaysDate =  [NSDate date];
    
    
        NSTimeInterval timeIntFormFirstDate = [todaysDate timeIntervalSinceDate:First_Date];
        NSTimeInterval timeIntFronLastDate  = [second_Date timeIntervalSinceDate:todaysDate];
    
        int interval1 = timeIntFormFirstDate/60;
        int interval2 = timeIntFronLastDate/60;
    
        if (interval1 >0 && interval2 >0)
        {
            NSLog(@"Today's date is between first and second date");
        }
    
    0 讨论(0)
  • 2020-12-06 02:20
    unsigned int flags = NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
    NSCalendar* calendar = [NSCalendar currentCalendar];
    
    NSDateComponents* components = [calendar components:flags fromDate:date1];
    
    NSDate* timeOnly = [calendar dateFromComponents:components];
    

    This will give you a date object where everything but the hours/minutes/seconds have been reset to some common value. Then you can use the standard NSDate compare functions on them.

    For reference, here is the opposite question to yours: Comparing two NSDates and ignoring the time component

    0 讨论(0)
  • 2020-12-06 02:31

    You can create a date representing the start of today and add the time as components to it to get the boundary dates.

    NSDate *now = [NSDate date];
    NSDate *startOfToday;
    [[NSCalendar currentCalendar] rangeOfUnit:NSDayCalendarUnit startDate:&startOfToday interval:NULL forDate:now];
    
    
    NSDateComponents *startComps = [[NSDateComponents alloc] init];
    startComps.hour = 7;
    startComps.minute = 30;
    
    NSDateComponents *endComps = [[NSDateComponents alloc] init];
    endComps.hour = 20;
    
    NSDate *startDate =  [[NSCalendar currentCalendar] dateByAddingComponents:startComps toDate:startOfToday options:0];
    NSDate *endDate =  [[NSCalendar currentCalendar] dateByAddingComponents:endComps toDate:startOfToday options:0];
    
    if ([startDate timeIntervalSince1970] < [now timeIntervalSince1970] && [now timeIntervalSince1970]  < [endDate timeIntervalSince1970]) {
        NSLog(@"good");
    }
    
    0 讨论(0)
提交回复
热议问题