1. 程式人生 > >iOS NSCalendar獲取當月天數

iOS NSCalendar獲取當月天數

 

獲取當月第一天是周幾

- (void)calculationThisMonthFirstDayInWeek:(NSDate *)date;
{
    if (isEmpty(date)) {
        date = [NSDate date];
    }
    NSCalendar * calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
    NSDateComponents * comps = [[NSDateComponents alloc] init];
    NSDateComponents * theComps = [[NSDateComponents alloc] init];
    NSInteger unitFlags = NSCalendarUnitDay | NSCalendarUnitWeekday | NSCalendarUnitMonth | NSCalendarUnitYear;
    comps = [calendar components:unitFlags fromDate:date];
    theComps = [calendar components:unitFlags fromDate:[NSDate date]];
//    NSInteger theMonth = [theComps month];// 本月的月份
    NSUInteger day = [comps day];// 是本月第幾天
//    NSInteger todayInMonth = day;
//    NSString *dateStr = [[self showDateFormatter] stringFromDate:date];
//    NSString *todayStr = [dateFormatter stringFromDate:[NSDate date]];
    if (day > 1) {// 如果不是本月第一天
        // 將日期推算到本月第一天
        NSInteger hours = (day - 1) * -24;
        date = [NSDate dateWithTimeInterval:hours * 60 * 60 sinceDate:date];
    }
    comps = [calendar components:unitFlags fromDate:date];
    dayInWeek = [comps weekday] - 1;// 是周幾
    
//    NSInteger year = [comps year];// 公曆年
//    NSInteger month = [comps month];// 公里月
//    if ([dateStr isEqualToString:todayStr]) {
//        NSLog(@"%ld",(long)day + dayInWeek - 2);
//    }
}

 獲取某年某月 有多少天

// 獲取某年某月總共多少天
- (NSInteger)getDaysInMonth:(NSInteger)year month:(NSInteger)imonth {
    // imonth == 0的情況是應對在CourseViewController裡month-1的情況
    if((imonth == 0)||(imonth == 1)||(imonth == 3)||(imonth == 5)||(imonth == 7)||(imonth == 8)||(imonth == 10)||(imonth == 12))
        return 31;
    if((imonth == 4)||(imonth == 6)||(imonth == 9)||(imonth == 11))
        return 30;
    if((year%4 == 1)||(year%4 == 2)||(year%4 == 3))
    {
        return 28;
    }
    if(year%400 == 0)
        return 29;
    if(year%100 == 0)
        return 28;
    return 29;
}

獲取本月有多少天

- (NSInteger)calculationThisMonthDays:(NSDate *)days
{
    NSCalendar * calendar = [NSCalendar currentCalendar];
    if (isEmpty(days)) {
        days = [NSDate date];
    }
    NSRange range = [calendar rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:days];
    return range.length;
}