NSDates
사이에 발생하는 특정 요일의 수를 어떻게 확인할 수 있습니까?두 개의 NSDate 사이에 발생하는 특정 요일의 수
나는 꽤 오랫동안 수색했지만, 특정 주중 하루뿐만 아니라 총 평일 수가 계산 된 유일한 해결책을 생각해 냈습니다.
NSDates
사이에 발생하는 특정 요일의 수를 어떻게 확인할 수 있습니까?두 개의 NSDate 사이에 발생하는 특정 요일의 수
나는 꽤 오랫동안 수색했지만, 특정 주중 하루뿐만 아니라 총 평일 수가 계산 된 유일한 해결책을 생각해 냈습니다.
다음 코드의 아이디어는 시작 날짜 이후 주어진 평일의 첫 번째 발생을 계산 한 다음 종료 날짜에 나머지 주의 수를 계산하는 것이다.
NSDate *fromDate = ...;
NSDate *toDate = ...;
NSUInteger weekDay = ...; // The given weekday, 1 = Sunday, 2 = Monday, ...
NSUInteger result;
// Compute weekday of "fromDate":
NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *c1 = [cal components:NSWeekdayCalendarUnit fromDate:fromDate];
// Compute next occurrence of the given weekday after "fromDate":
NSDateComponents *c2 = [[NSDateComponents alloc] init];
c2.day = (weekDay + 7 - c1.weekday) % 7; // # of days to add
NSDate *nextDate = [cal dateByAddingComponents:c2 toDate:fromDate options:0];
// Compare "nextDate" and "toDate":
if ([nextDate compare:toDate] == NSOrderedDescending) {
// The given weekday does not occur between "fromDate" and "toDate".
result = 0;
} else {
// The answer is 1 plus the number of complete weeks between "nextDate" and "toDate":
NSDateComponents *c3 = [cal components:NSWeekCalendarUnit fromDate:nextDate toDate:toDate options:0];
result = 1 + c3.week;
}
(코드는 일주일에 그레고리오 력의 사실 인 7 일이 있다고 가정합니다. 필요한 경우 코드는 아마도 임의의 달력 작업을 일반화 할 수있다.)
NSDateComponents *components = [gregorianCalendar components:NSDayCalendarUnit fromDate:[NSDate date] toDate:[NSDate date]];
//pass different date in fromDate and toDate column.
질문은 (있는 경우 나는 그것을 정확하게 이해한다) 얼마나 많은 것인가? 일요일은 두 주어진 날짜 사이에 있습니다. –
어디서 요일을 지정해야합니까 (예 : 월요일 또는 화요일 또는 금요일 등) ?? 특정 평일의 출현 만 계산하기 때문에. – DemonicPossessions1991
@MartinR : 당연히 일요일뿐만 아니라. 일주일 중 언제라도 가능합니다. 예 : 월요일 또는 화요일 또는 다른 날, 그래, 맞아, 너는 나를 정확하게 잡았다 .. – DemonicPossessions1991
언급 한 일반화는 하드 7을'[cal rangeOfUnit : NSWeekdayCalendarUnit inUnit : NSWeekCalendarUnit forDate : fromDate]'로 대체하는 것처럼 간단해야합니다. –