2015-01-13 3 views
7

私は過去に、NSDateComponentsを既存の日付に使用して、特定の時間間隔で追加するために以下の関数を使用しました。NSDateに何週間も追加するには?

週間の値が、私は私がやりたいものを達成することはできませんを意味し、 NSDateComponentsのために推奨されていませんiOS8から
(NSDate *)dateByAddingComponents:(NSDateComponents *)comps 
          toDate:(NSDate *)date 
         options:(NSCalendarOptions)opts 

:与えられたNSDateに週の一定数を追加することによって、新しいNSDateを生成します。

ご協力いただければ幸いです。

+2

週は7日間です。 –

+0

'weekOfYear'を試しましたか? – zaph

答えて

6

アップデート:Zaph氏の答えによると、Appleは実際に私が提供した回答の代わりにweekOfYearまたはweekOfMonthを使用することを実際に推奨しています。詳細はザフの答えをご覧ください。


あなたはおそらくすぐにここにあなたがそれをoverthinkingしていることを認識し、しかしますが、あなたが週値は廃止されていてもかかわらず、これまでに数週間の一定数を追加することができます方法です、例:

NSDateComponents *comp = [NSDateComponents new]; 
int numberOfDaysInAWeek = 7; 
int weeks = 3; // <-- this example adds 3 weeks 
comp.day = weeks * numberOfDaysInAWeek; 

NSDate *date = [[NSCalendar currentCalendar] dateByAddingComponents:comp toDate:date options:0]; 
+0

ありがとうございます。あなたは正しいと思っています。 – Rich

+0

問題ありません。それは起こる:) –

+0

申し訳ありませんが、この答えは毎週正確に7日間と仮定しているので間違っている可能性があります。 @Zaphの答えはより安全です。 – rmaddy

-1

次の方法でNSDateにカテゴリを追加することができます。

- (NSDate *) addWeeks:(NSInteger)weeks 
{ 
    NSCalendar *gregorian=[[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 
    NSDateComponents *components=[[NSDateComponents alloc] init]; 
    components.day = weeks * 7; 

    return [gregorian dateByAddingComponents:components toDate:self options:0]; 
} 
+0

Appleが 'week'を削除した理由がありました。必要なのは、' weekOfYear'をドキュメントの提案として使用するだけで、 'NSDate'に別のフォームを追加しないでください。 – zaph

16

を単に使用weekOfYear

week 210の

アップルのドキュメント:

廃止声明
使用weekOfYearまたはweekOfMonth代わりに、あなたが意図した内容に応じ。

NSDate *date = [NSDate date]; 
NSDateComponents *comp = [NSDateComponents new]; 
comp.weekOfYear = 3; 
NSDate *date1 = [[NSCalendar currentCalendar] dateByAddingComponents:comp toDate:date options:0]; 
NSLog(@"date: %@", date); 
NSLog(@"date1: %@", date1); 

出力:

  
date: 2015-01-13 04:06:26 +0000 
date1: 2015-02-03 04:06:26 +0000 

あなたはこの警告を取得week使用する場合:

'週は' 推奨されません

:最初に...非推奨 - 利用weekOfMonthまたはweekOfYear 、あなたが意味するものに応じて

weekOfMonthまたはweekOfYearをデルタとして使用すると、同じように動作します。彼らが異なっているのは、週の番号を取得するために使用されている週のうち、6か月の範囲で53の範囲で週を取得する場合です。

0

dateByAddingUnitを使用することをお勧めします。もっと直感的です

return [NSDate[[NSCalendar currentCalendar] dateByAddingUnit:NSCalendarUnitMonth value:3 toDate:toDate options:0]; 
関連する問題