这个月有多少个工作日

LpL*_*ich 3 objective-c ios

获得一个月的天数很容易,

    NSDate *today = startDate; 
    NSCalendar *c = [NSCalendar currentCalendar];
    NSRange days = [c rangeOfUnit:NSDayCalendarUnit
                           inUnit:NSMonthCalendarUnit
                          forDate:today];
Run Code Online (Sandbox Code Playgroud)

但是如何获得当月的工作日数(周一至周五)?

Rav*_*mar 5

不幸的是,没有直接的方法在两个日期之间循环,你无法直接从NSDate对象获得工作日.因此,您需要添加几行才能使其正常工作.这里的关键是使用NSDateComponents.在这个例子中,我使用的是公历.默认情况下,根据Apple的文档,工作日从周日开始,即第一天(字面意思为1).请不要认为周日是零(通常会感到困惑).

它可能需要一些语法更改,因为我没有在XCode上尝试过

NSInteger count = 0;
NSInteger sunday = 1;
NSInteger saturday = 7;

// Set the incremental interval for each interaction.
NSDateComponents *oneDay = [[NSDateComponents alloc] init];
[oneDay setDay:1];

// Using a Gregorian calendar.
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

NSDate *currentDate = fromDate;

// Iterate from fromDate until toDate
while ([currentDate compare:toDate] == NSOrderedAscending) {

    NSDateComponents *dateComponents = [calendar components:NSWeekdayCalendarUnit fromDate:currentDate];

    if (dateComponents.weekday != saturday && dateComponents.weekday != sunday) {
        count++;
    }

    // "Increment" currentDate by one day.
    currentDate = [calendar dateByAddingComponents:oneDay
                                            toDate:currentDate
                                           options:0];
}

NSLog(@"count = %d", count);
Run Code Online (Sandbox Code Playgroud)