ios - 这个月有多少个工作日

标签 ios objective-c

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

    NSDate *today = startDate; 
    NSCalendar *c = [NSCalendar currentCalendar];
    NSRange days = [c rangeOfUnit:NSDayCalendarUnit
                           inUnit:NSMonthCalendarUnit
                          forDate:today];

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

最佳答案

不幸的是,没有直接的方法可以在两个日期之间循环,并且您不能直接从 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);

关于ios - 这个月有多少个工作日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22015458/

相关文章:

iOS 9 - Swift - 将数据写入 FileStorage - 每个字段的前缀为 "Optional"

ios - 如何在 Xcode 中跟踪多个触摸

ios - MKMapView 显示用户位置崩溃

ios - ios中sendEvent和Send Action的区别

iOS 7 保留了 iOS 6 的用户界面

ios - 使用 TableView 添加导航到 View Controller

iphone - 将 iPad 应用程序转换为 iPhone?

ios - 在SpriteKit(或SceneKit)中更新几何

iphone - 如何在后台线程上运行CFSocket以获得更准确的ping时间?

objective-c - 在 Obj-C 项目中,Swift 类未添加到自动生成的 swift header 中