Objective c 一周内所有NSDate的数组
我希望有一个函数,它以一个星期数作为输入,并返回一个包含所有NSDate的数组,这些NSDate是由这个特定的星期生成的 大概是这样的:Objective c 一周内所有NSDate的数组,objective-c,ios,ios5,nsdate,Objective C,Ios,Ios5,Nsdate,我希望有一个函数,它以一个星期数作为输入,并返回一个包含所有NSDate的数组,这些NSDate是由这个特定的星期生成的 大概是这样的: -(NSArray*)allDatesInWeek:(int)weekNumber { NSDate *today = [NSDate date]; NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; [c
-(NSArray*)allDatesInWeek:(int)weekNumber {
NSDate *today = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[calendar setFirstWeekday:2];
NSDateComponents *todayComp = [calendar components:NSYearCalendarUnit fromDate:today];
int currentyear = todayComp.year;
/* Calculate and return the date of weekNumber for current year */
}
如何以一种简单的方式实现这一点?已经过测试
-(NSArray*)allDatesInWeek:(int)weekNumber {
// determine weekday of first day of year:
NSCalendar *greg = [[NSCalendar alloc]
initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *coms = [[NSDateComponents alloc] init];
comps.day = 1;
NSDate *today = [NSDate date];
NSDate *tomorrow = [greg dateByAddingComponents:comps toDate:today];
const NSTimeInterval kDay = [tomorrow timeIntervalSinceDate:today];
comps = [greg components:NSYearCalendarUnit fromDate:[NSDate date]];
comps.day = 1;
comps.month = 1;
comps.hour = 12;
NSDate *start = [greg dateFromComponents:comps];
comps = [greg components:NSWeekdayCalendarUnit fromDate:start];
if (weekNumber==1) {
start = [start dateByAddingTimeInterval:-kDay*(comps.weekday-1)];
} else {
start = [start dateByAddingTimeInterval:
kDay*(8-comps.weekday+7*(weekNumber-2))];
}
NSMutableArray *result = [NSMutableArray array];
for (int i = 0; i<7; i++) {
[result addObject:[start dateByAddingTimeInterval:kDay*i]];
}
return [NSArray arrayWithArray:result];
}
-(NSArray*)所有日期每周:(int)周数{
//确定一年中第一天的工作日:
NSCalendar*greg=[[NSCalendar alloc]
initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents*coms=[[NSDateComponents alloc]init];
综合日=1;
NSDate*今天=[NSDate日期];
NSDate*明天=[greg dateByAddingComponents:comps toDate:today];
const NSTimeInterval kDay=[明天时间间隔开始日期:今天];
comps=[greg components:NSYearCalendarUnit fromDate:[NSDate date]];
综合日=1;
比较月份=1;
补偿小时=12;
NSDate*start=[greg dateFromComponents:comps];
comps=[greg components:nsWeekdayCalendarUnitFromDate:start];
如果(周数==1){
开始=[start dateByAddingTimeInterval:-kDay*(公司工作日-1)];
}否则{
开始=[开始日期通过添加时间间隔:
工作日*(8-comps.weekday+7*(weekNumber-2))];
}
NSMutableArray*结果=[NSMutableArray];
对于(inti=0;i
-(NSArray*)allDatesInWeek:(int)weekNumber {
// determine weekday of first day of year:
NSCalendar *greg = [[NSCalendar alloc]
initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *coms = [[NSDateComponents alloc] init];
comps.day = 1;
NSDate *today = [NSDate date];
NSDate *tomorrow = [greg dateByAddingComponents:comps toDate:today];
const NSTimeInterval kDay = [tomorrow timeIntervalSinceDate:today];
comps = [greg components:NSYearCalendarUnit fromDate:[NSDate date]];
comps.day = 1;
comps.month = 1;
comps.hour = 12;
NSDate *start = [greg dateFromComponents:comps];
comps = [greg components:NSWeekdayCalendarUnit fromDate:start];
if (weekNumber==1) {
start = [start dateByAddingTimeInterval:-kDay*(comps.weekday-1)];
} else {
start = [start dateByAddingTimeInterval:
kDay*(8-comps.weekday+7*(weekNumber-2))];
}
NSMutableArray *result = [NSMutableArray array];
for (int i = 0; i<7; i++) {
[result addObject:[start dateByAddingTimeInterval:kDay*i]];
}
return [NSArray arrayWithArray:result];
}
-(NSArray*)所有日期每周:(int)周数{
//确定一年中第一天的工作日:
NSCalendar*greg=[[NSCalendar alloc]
initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents*coms=[[NSDateComponents alloc]init];
综合日=1;
NSDate*今天=[NSDate日期];
NSDate*明天=[greg dateByAddingComponents:comps toDate:today];
const NSTimeInterval kDay=[明天时间间隔开始日期:今天];
comps=[greg components:NSYearCalendarUnit fromDate:[NSDate date]];
综合日=1;
比较月份=1;
补偿小时=12;
NSDate*start=[greg dateFromComponents:comps];
comps=[greg components:nsWeekdayCalendarUnitFromDate:start];
如果(周数==1){
开始=[start dateByAddingTimeInterval:-kDay*(公司工作日-1)];
}否则{
开始=[开始日期通过添加时间间隔:
工作日*(8-comps.weekday+7*(weekNumber-2))];
}
NSMutableArray*结果=[NSMutableArray];
对于(int i=0;i,此解决方案完全依赖于NSCalendar,而不对用户的日历进行任何假设
-(NSArray*)allDatesInWeekContainingDate:(NSDate*)referenceDate {
NSCalendar *calendar = [NSCalendar currentCalendar];
NSInteger ordinalityOfInput = [calendar ordinalityOfUnit:NSWeekdayCalendarUnit
inUnit:NSWeekCalendarUnit
forDate:referenceDate];
NSDateComponents *componentsToAdd = [[NSDateComponents alloc] init];
componentsToAdd.day = -1 * (ordinalityOfInput - 1);
NSDate *startDate = [calendar dateByAddingComponents:componentsToAdd toDate:referenceDate options:0];
NSInteger numDaysInWeek = [calendar maximumRangeOfUnit:NSWeekdayCalendarUnit].length;
NSMutableArray *allDays = [NSMutableArray arrayWithCapacity:numDaysInWeek];
NSDateComponents *curDayOffset = [[NSDateComponents alloc] init];
for (int curDay=0; curDay < numDaysInWeek; curDay++) {
curDayOffset.day = curDay;
[allDays addObject:[calendar dateByAddingComponents:curDayOffset toDate:startDate options:0]];
}
return allDays;
}
-(NSArray*)所有日期包含日期:(NSDate*)参考日期{
NSCalendar*日历=[NSCalendar currentCalendar];
NSInteger ordinalityOfInput=[日历顺序功能:NSWeekdayCalendarUnit
inUnit:NSWeekCalendarUnit
forDate:referenceDate];
NSDateComponents*componentsToAdd=[[NSDateComponents alloc]init];
componentsToAdd.day=-1*(ordinalityOfInput-1);
NSDate*startDate=[calendar Date ByAddingComponents:Components StoAddToDate:referenceDate选项:0];
NSInteger numDaysInWeek=[calendar maximumRangeOfUnit:NSWeekdayCalendarUnit]。长度;
NSMUTABLEARRY*allDays=[NSMUTABLEARRY阵列容量:numDaysInWeek];
NSDateComponents*curDayOffset=[[NSDateComponents alloc]init];
对于(int curDay=0;curDay
此解决方案完全依赖于NSCalendar,而不对用户的日历进行任何假设
-(NSArray*)allDatesInWeekContainingDate:(NSDate*)referenceDate {
NSCalendar *calendar = [NSCalendar currentCalendar];
NSInteger ordinalityOfInput = [calendar ordinalityOfUnit:NSWeekdayCalendarUnit
inUnit:NSWeekCalendarUnit
forDate:referenceDate];
NSDateComponents *componentsToAdd = [[NSDateComponents alloc] init];
componentsToAdd.day = -1 * (ordinalityOfInput - 1);
NSDate *startDate = [calendar dateByAddingComponents:componentsToAdd toDate:referenceDate options:0];
NSInteger numDaysInWeek = [calendar maximumRangeOfUnit:NSWeekdayCalendarUnit].length;
NSMutableArray *allDays = [NSMutableArray arrayWithCapacity:numDaysInWeek];
NSDateComponents *curDayOffset = [[NSDateComponents alloc] init];
for (int curDay=0; curDay < numDaysInWeek; curDay++) {
curDayOffset.day = curDay;
[allDays addObject:[calendar dateByAddingComponents:curDayOffset toDate:startDate options:0]];
}
return allDays;
}
-(NSArray*)所有日期包含日期:(NSDate*)参考日期{
NSCalendar*日历=[NSCalendar currentCalendar];
NSInteger ordinalityOfInput=[日历顺序功能:NSWeekdayCalendarUnit
inUnit:NSWeekCalendarUnit
forDate:referenceDate];
NSDateComponents*componentsToAdd=[[NSDateComponents alloc]init];
componentsToAdd.day=-1*(ordinalityOfInput-1);
NSDate*startDate=[calendar Date ByAddingComponents:Components StoAddToDate:referenceDate选项:0];
NSInteger numDaysInWeek=[calendar maximumRangeOfUnit:NSWeekdayCalendarUnit]。长度;
NSMUTABLEARRY*allDays=[NSMUTABLEARRY阵列容量:numDaysInWeek];
NSDateComponents*curDayOffset=[[NSDateComponents alloc]init];
对于(int curDay=0;curDay
周数代表什么?给定年份中的周数?不,不是。我正在创建一个计划,并希望将每个页面显示为周。我知道一些基本的NSDate和NSDate组件,我可以从NSDate组件获取周数,但现在我正在做相反的操作。从NSDate或周数获取一周中的所有天。有一年52周,所以在1-52年之间……所以……你是哪一年得到这些日期的?你认为一周中哪一天是一周中的第一天?,星期一是第一周,但您将在NSCalendarsetFirstWeekday:
中设置它,这与问题无关。周数表示什么?给定年份中的周?不,不是。我正在创建一个时间表,希望将每个页面显示为周。我知道一些基本的NSDate和NSDate组件,我可以从NSDat获取周经济因素,但现在我正在倒转。从一个星期或一个星期的数字中抽出一天的时间。一年有52个星期,所以在1-52之间:所以……你是哪一年得到这些日期的?你认为一周中哪一天是一周中的第一天?
并将其转换为NSComponents),星期一是第一周,但您将在NSCalendarsetFirstWe中进行设置