2013-08-09 13 views
5

現在の日付の次の月曜日の日付を取得したい。次の月曜日のNSDateを見つける

今日の日付が2013-08-09(金曜日)の場合、2013-08-12の日付を取得します。

どうすればいいですか?コードの

あなたはこれらの線に沿って

NSDateComponents *components = [[NSCalendar currentCalendar] components: NSYearCalendarUnit | NSWeekOfYearCalendarUnit fromDate:[NSDate date]]; 

NSDateComponents *comps = [[NSDateComponents alloc] init]; 
[comps setWeekOfYear:[components weekOfYear] + 1]; 
[comps setWeekday:1]; 
[comps setYear:[components year]]; 
NSCalendar *calendar = [NSCalendar currentCalendar]; 
[calendar setFirstWeekday:2]; //This needs to be checked, which day is monday? 
NSDate *date = [calendar dateFromComponents:comps]; 

何かが仕事ができる適切に開始NSDateComponentsオブジェクトを渡すNSCalendar方法dateFromComponents:を使用することができます

+5

を思い出し、7 + weekDayYouWantによって(9 - weekdayToday) % 7;内部9を変更簡単な質問とほとんど努力を必要としない、日付はどんな言語でも地獄のように厄介なので、私はなぜあなたが落選すべきなのか分からない。 –

答えて

30

この作品は、あなたが望む結果を得る必要があります。月曜日からの日数を計算し、現在の日付から追加します。

NSDate *now = [NSDate date]; 
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *components = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSWeekCalendarUnit | NSWeekdayCalendarUnit fromDate:now]; 

NSUInteger weekdayToday = [components weekday]; 
NSInteger daysToMonday = (9 - weekdayToday) % 7; 

NSDate *nextMonday = [now dateByAddingTimeInterval:60*60*24*daysToMonday]; 

テストされていないが、動作するはずですし、カレンダーの最初の日を変更することを心配せずに

そしてそれも簡単にごとに別の日の週のにaddaptedすることができ、これだけではあるがその日曜日= 1、月曜日= 2 ...

+0

ルーカスありがとう、完璧に動作します。ただ一つのこと、今日が月曜日なら、この月曜日の代わりに次の月曜日を見せたいと思う。どのように私はこれを達成することができます私に教えてください?ありがとうございました – iOSAppDev

+0

私はそのような1日のために行動を変更するエレガントな方法はないと思います。しかし、あなたは** ** '' 'nextMonday'''コードの前に** ** **(置き換えないで)**を追加することができます:' '' daysToMonday =(daysToMonday == 0)? 7:日toMonday; ''。このように、現在の日が月曜日の場合は、0日の代わりに7日を追加します。このケースのためのよりよい解決策を見つけたら、ただ私に知らせてください –

+1

素早い返信とあなたのソリューションが完璧に働いてくれてありがとう:ありがとう – iOSAppDev

5

(盲目的に入力された)

+0

日曜日(週日= 0)で週が始まると仮定すると、このコードは日曜日に実行される翌日ではなく、週の月曜日を取得しませんか? –

+3

平日の単位は1からnまでの数字です.nは週の日数です。たとえば、グレゴリオ暦では、nは7、日曜日は1で表されます。 コードを変更する必要があります。 – Vik

+1

これを考慮に入れてコードを少し編集しました。もちろん、1日の最後の週ではないことも確認してください。 – Vik

関連する問題