Ios 每月第一天的工作日

Ios 每月第一天的工作日,ios,cocoa-touch,date,nsdate,nsdatecomponents,Ios,Cocoa Touch,Date,Nsdate,Nsdatecomponents,我需要得到每月第一天的工作日。例如,对于本月2013年9月,第一天是周日。首先,获取本月的第一天(例如): 然后使用NSDateFormatter将其打印为工作日: NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"EEEE"]; NSLog(@"%@", [dateFormatter stringFromDate:firstDayOfMonth])

我需要得到每月第一天的工作日。例如,对于本月2013年9月,第一天是周日。

首先,获取本月的第一天(例如):

然后使用NSDateFormatter将其打印为工作日:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];  
[dateFormatter setDateFormat:@"EEEE"]; 
NSLog(@"%@", [dateFormatter stringFromDate:firstDayOfMonth]);

另请注意,根据您需要的输出,您可以使用
NSDateFormatter
(如前所述)或使用
NSDateComponents
NSDateFormatter
将为您提供字符串表示,
NSDateComponents
将为您提供整数值。方法
工作日
可以执行您想要的操作

NSDateComponents *components = ...;
NSInteger val = [components weekday];

下面是获取当月第一天的工作日名称的解决方案

NSDateComponents *weekdayComps = [[NSDateComponents alloc] init];
weekdayComps = [calendar.currentCalendar components:calendar.unitFlags fromDate:calendar.today];
weekdayComps.day = 1;
NSDateFormatter *weekDayFormatter = [[NSDateFormatter alloc]init];
[weekDayFormatter setDateFormat:@"EEEE"];
NSString *firstweekday = [weekDayFormatter stringFromDate:[calendar.currentCalendar dateFromComponents:weekdayComps]];
NSLog(@"FIRST WEEKDAY: %@", firstweekday);
对于工作日索引,请使用

NSDate *weekDate = [calendar.currentCalendar dateFromComponents:weekdayComps];
NSDateComponents *components = [calendar.currentCalendar components: NSWeekdayCalendarUnit fromDate: weekDate];
NSUInteger weekdayIndex = [components weekday];
NSLog(@"WEEKDAY INDEX %i", weekdayIndex);

如果需要,您还可以增加或减少月份。

对于Swift 4.2

第一:

extension Calendar {
    func startOfMonth(_ date: Date) -> Date {
        return self.date(from: self.dateComponents([.year, .month], from: date))!
    }
}
第二:

self.firstWeekDay = calendar.component(.weekday, from: calendar.startOfMonth(Date()))

你的问题不清楚。你想得到每个月1号的工作日吗?2013年9月1日是星期日,2013年10月1日是星期二等等@rmaddy是的,我的意思是that@Wain我尝试过玩日期组件、工作日序号、工作日等
self.firstWeekDay = calendar.component(.weekday, from: calendar.startOfMonth(Date()))