Cocoa-Touch: How do I see if two NSDates are in the same day?

后端 未结 12 663
走了就别回头了
走了就别回头了 2020-11-30 04:35

I need to know if two NSDate instances are both from the same day.

Is there an easier/better way to do it than getting the NSDateComponents and comparing day/month/y

12条回答
  •  日久生厌
    2020-11-30 05:17

    I create my own utility classes.

    ZYUtility.h

    @interface ZYUtility : NSObject
    + (NSDate *)yesterday;
    + (NSDate *)tomorrow;
    + (NSDate *)endOfDay:(NSDate *)date;
    + (NSDate *)beginningOfDay:(NSDate *)date;
    @end
    

    ZYUtility.m

    + (NSDate *)yesterday;
    {
        NSCalendar *calendar = [NSCalendar currentCalendar];
        NSDateComponents *componets = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit
                                                  fromDate:[NSDate date]];
        componets.day -= 1;
        componets.hour = 24;
        componets.minute = 0;
        componets.second = 0;
    
        return [calendar dateFromComponents:componets];
    }
    
    + (NSDate *)tomorrow;
    {
        NSCalendar *calendar = [NSCalendar currentCalendar];
        NSDateComponents *componets = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit
                                                  fromDate:[NSDate date]];
        componets.day += 1;
        componets.hour = 0;
        componets.minute = 0;
        componets.second = 0;
    
        return [calendar dateFromComponents:componets];
    }
    
    + (NSDate *)beginningOfDay:(NSDate *)date {
        NSCalendar *calendar = [NSCalendar currentCalendar];
    
        unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit;
        NSDateComponents *comp = [calendar components:unitFlags fromDate:date];
    
        return [calendar dateFromComponents:comp];
    }
    
    + (NSDate *)endOfDay:(NSDate *)date {
        NSCalendar *calendar = [NSCalendar currentCalendar];
    
        NSDateComponents *components = [NSDateComponents new];
        components.day = 1;
    
        NSDate *theDate = [calendar dateByAddingComponents:components
                                                    toDate:[ZYUtility beginningOfDay:date]
                                                   options:0];
    
        theDate = [theDate dateByAddingTimeInterval:-1];
    
        return theDate;
    }
    

提交回复
热议问题