Get firstdate, lastdate of month?

后端 未结 8 1164
不思量自难忘°
不思量自难忘° 2021-02-01 21:29

I want to get firstdate、lastdate of month,I try

NSDateComponents *components = [calendar components:units fromDate:[NSDate date]];
[components setDay:1];
self.c         


        
8条回答
  •  耶瑟儿~
    2021-02-01 22:11

    Try this trick.

    Day Param: 1 is to Get first date of this month

    Day Param: 0 is to Get last date of this month by getting last date of month previous to next month (means this month))

    - (void)returnDate:(NSDate *)date {
    
        NSCalendar * calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
        unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit;
        NSDateComponents *comps = [calendar components:unitFlags fromDate:date];
    
        NSDate * firstDateOfMonth = [self returnDateForMonth:comps.month year:comps.year day:1];
        NSDate * lastDateOfMonth = [self returnDateForMonth:comps.month+1 year:comps.year day:0];
    
        NSLog(@"date %@", date);              // date 2013-06-20
        NSLog(@"First %@", firstDateOfMonth); // firstDateOfMonth 2013-06-01
        NSLog(@"Last %@", lastDateOfMonth);   // lastDateOfMonth  2013-06-30
    
    }
    

    Next

    - (NSDate *)returnDateForMonth:(NSInteger)month year:(NSInteger)year day:(NSInteger)day {
    
        NSDateComponents *components = [[NSDateComponents alloc] init];
    
        [components setDay:day];
        [components setMonth:month];
        [components setYear:year];
    
        NSCalendar *gregorian = [[NSCalendar alloc]
                                 initWithCalendarIdentifier:NSGregorianCalendar];
        return [gregorian dateFromComponents:components];
    }
    

    Don't forget for right Date Formater

    Updated for IOS 8.0

    - (void)returnDate:(NSDate *)date { 
        NSCalendar * calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
        unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth;
        NSDateComponents *comps = [calendar components:unitFlags fromDate:date];
    
        NSDate * firstDateOfMonth = [self returnDateForMonth:comps.month year:comps.year day:1];
        NSDate * lastDateOfMonth = [self returnDateForMonth:comps.month+1 year:comps.year day:0];
    
        NSLog(@"date %@", date);              // date 2013-06-20
        NSLog(@"First %@", firstDateOfMonth); // firstDateOfMonth 2013-06-01
        NSLog(@"Last %@", lastDateOfMonth);   // lastDateOfMonth  2013-06-30
    
    }
    

    Next

    - (NSDate *)returnDateForMonth:(NSInteger)month year:(NSInteger)year day:(NSInteger)day {
    
        NSDateComponents *components = [[NSDateComponents alloc] init];
    
        [components setDay:day];
        [components setMonth:month];
        [components setYear:year];
    
        NSCalendar *gregorian = [[NSCalendar alloc]
                             initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
        return [gregorian dateFromComponents:components];
    }
    

    Now your are working with:

    • NSCalendarUnitYear
    • NSCalendarUnitWeekOfMonth
    • NSCalendarIdentifierGregorian

提交回复
热议问题