2017-02-15 4 views
0

NSDate가 오늘 같은 주에 있는지 확인하고 싶습니다. 따라서 나는 weekOfYearNSDateComponents에서이 post에 언급 된 것과 같이 생각합니다. 내 예에서주중 주를 사용하여 NSDate가 현재 주에 있는지 확인하십시오.

- (BOOL)dateIsThisWeek:(NSDate *)date 
{ 
    NSCalendar *cal = [NSCalendar currentCalendar]; 
    [cal setFirstWeekday: 2]; // Added in second try 

    NSDate *today = [NSDate date]; 
    NSDateComponents *todaysComponents = [cal components:NSCalendarUnitWeekOfYear fromDate: today]; 
    NSUInteger todaysWeek = [todaysComponents weekOfYear]; 

    NSDateComponents *otherComponents = [cal components:NSCalendarUnitWeekOfYear fromDate: date]; 
    NSUInteger anotherWeek = [otherComponents weekOfYear]; 

    return todaysWeek == anotherWeek; // todaysWeek=7 | anotherWeek=8 
} 

나는 다음 날짜를했습니다 :

today: 2017-02-15 12:00:00 +0000 
date: 2017-02-18 12:00:00 +0000 

문제는 todaysWeek 8에 7 anotherWeek로 설정하고 내가 왜 상상할 수있다.

주일이 일요일부터 시작하기 때문에 캘린더의 첫 번째 요일을 2 (월요일)로 설정했지만 불행히도 성공하지는 못했습니다.

나는 또한 불행하게도 같은 결과이 코드를 시도했습니다

UPDATE :

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 
NSDateComponents *todaysComponents = [gregorian components:NSCalendarUnitWeekOfYear fromDate:[NSDate date]]; 
NSUInteger todaysWeek = [todaysComponents weekOfYear]; 
NSDateComponents *otherComponents = [gregorian components:NSCalendarUnitWeekOfYear fromDate: date]; 
NSUInteger datesWeek = [otherComponents weekOfYear]; 

return todaysWeek==datesWeek; // todaysWeek=7 | datesWeek=8 

두 날짜가 여러 websites 같은 주 번호 7에 있어야는 설명한다.

+1

"주"를 어떻게 정의합니까? 지난 주 일요일부터 시작되는 현재의 "명명 된 주"입니까? 지난 월요일부터? 일주일 연속 7 일입니까? 1 월 1 일이 목요일이면 1 월 6 일 화요일은 여전히 ​​첫 번째 "주"입니까? – DonMag

+0

[NSDate가 현재 주에 있는지 확인하는 방법] (http://stackoverflow.com/questions/38970836/how-to-check-if-nsdate-is-in-current-week) –

+0

@DonMag 내 의견으로는이 주 월요일부터 일요일까지 일주일입니다. http://week-number.net/calendar-with-week-numbers-2017.html – user3191334

답변

1

시도해주세요.

2017-02-17 03:51:58.231797 Sneak[5518:2676264] todays week 7 
2017-02-17 03:51:58.231836 Sneak[5518:2676264] anotherWeek 7 

편집 : (코멘트 섹션에서 아래에 언급 한 바와 같이)

월요일에 따라주의 첫 번째 날입니다

NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 
[gregorianCalendar setLocale:[NSLocale localeWithLocaleIdentifier:@"be_NL"]]; 

NSDateComponents *comps = [[NSDateComponents alloc] init]; 
[comps setDay:19]; 
[comps setMonth:02]; 
[comps setYear:2017]; 
NSDate *date = [gregorianCalendar dateFromComponents:comps]; 

//NSCalendar *cal = [NSCalendar currentCalendar]; 
//[gregorianCalendar setFirstWeekday:2]; // Added in second try 

NSDate *today = [NSDate date]; 
NSDateComponents *todaysComponents = [gregorianCalendar components:NSCalendarUnitWeekOfYear fromDate: today]; 
//[todaysComponents setWeekdayOrdinal:2]; 

NSDateComponents *otherComponents = [gregorianCalendar components:NSCalendarUnitWeekOfYear fromDate: date]; 
//[otherComponents setWeekdayOrdinal:2]; 

// Not sure if needed to set timezone too depending on your local time, but you can set this for all dates if needed 
//[otherComponents setTimeZone:[NSTimeZone localTimeZone]]; 

NSUInteger todaysWeek = [todaysComponents weekOfYear]; 
NSUInteger anotherWeek = [otherComponents weekOfYear]; 

NSLog(@"todays week %ld",(long)todaysWeek); 
NSLog(@"anotherWeek %ld",(long)anotherWeek); 

인쇄 아웃 (내 자신의 프로젝트 코드에서 복사) 국제 표준 ISO 8601을 준수하지만 미국, 캐나다 및 일본에서는 두 번째 요일로 계산됩니다. 월요일은 일요일과 화요일 전날에 우리 현대 날 그레고리력으로옵니다. - timeanddate.com/calendar/days/monday.html 희망 "be_NL는"전환 결코 - DonMag

+0

감사합니다. 죄송합니다. 방금 코드를 복사 했으므로 이제 작동 중입니다. 나는 항상 8 주를 얻었던 이유를 상상할 수 없다. 편집 : 첫 번째 해결책은 충분했지만 두 번째 해결책은 훌륭했다. 고맙습니다 :) – user3191334

+0

@ user3191334 NP, 당신이 그것을 사용할 수 있습니다. 커뮤니티에 대한 내 대답을 수락하는 것을 잊지 마세요 :) –

+1

당신이 * 확실히 * 당신이 원하는 것을하고 있습니까? 내가 올바르게 이해하면 @ user3191334는 2 월 19 일 일요일이 2 월 15 일 수요일과 같은 주일이되기를 바랍니다. 위의 코드를 사용하면 비교 날짜를 18 일 토요일로 설정하고 7 & 7 주를 얻습니다. .. 만약 당신이'[comps setDay : 19]'로 실행한다면 당신은 7 & 8 주를 얻는다. 아니면? – DonMag

0

이 몰래의 코드에 아주 약간의 수정입니다 ... 그것을 전화 :

// 
// startDayOfWeek: Sunday == 1, Monday == 2, Tues == 3, etc 

Bool b = [self dateIsThisWeek:date startDayOfWeek:2]; 


- (BOOL)dateIsThisWeek:(NSDate *)dateToTest startDayOfWeek:(NSInteger)iStart { 

    NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 

    // this is the key - 1 == week runs Sunday-Saturday, 2 == Monday-Sunday, 3 == Tues-Mon, etc 
    [gregorianCalendar setFirstWeekday:iStart]; 

    NSDate *today = [NSDate date]; 

    NSDateComponents *todaysComponents = [gregorianCalendar components:NSCalendarUnitWeekOfYear|NSCalendarUnitWeekday fromDate: today]; 
    NSInteger todaysWeek = [todaysComponents weekOfYear]; 

    NSDateComponents *testComponents = [gregorianCalendar components:NSCalendarUnitWeekOfYear|NSCalendarUnitWeekday fromDate: dateToTest]; 
    NSInteger testsWeek = [testComponents weekOfYear]; 

    return todaysWeek == testsWeek; 
}