1

特定の期間内にコアデータからオブジェクトをフェッチする必要があります。つまりweekly、、、。monthly_yearly

次に、コンポーネントから生成された日付を次のpredicateようにフィードします。

[NSPredicate predicateWithFormat:@"(date >= %@) AND (date <= %@", 
                                 intervalStartDate, intervalEndDate];

間隔/期間の例:

          start          end            start          end
weekly    Jan 2, 2012 to Jan 08, 2012,  Jan 9, 2012 to Jan 15, 2012,  etc.
monthly   Jan 1, 2012 to Jan 31, 2012,  Feb 1, 2012 to Feb 29, 2012,  etc.
yearly    Jan 1, 2011 to Dec 31, 2011,  Jan 1, 2012 to Dec 31, 2012,  etc.

これらを使用して、その期間中に特定のオブジェクトを取得できました。

私の問題は、日付コンポーネントをインクリメントするための最良の方法がわからないことです。うるう年などを考慮する必要があります。

これを達成するための最良の方法は何でしょうか?

4

2 に答える 2

2

正しい NSCalendar を使用し、日付の各計算を互いに独立して処理する限り、結果の日付は問題ないはずです。

NSDateComponents *dateOffset = [[NSDateComponents alloc] init];
[dateOffset setWeek:1]; // weekly
// [dateOffset setMonth:1]; // monthly
// [dateOffset setYear:1]; // yearly

NSDate *endDate = [gregorian dateByAddingComponents:dateOffset toDate:startDate options:0];
于 2012-12-07T09:39:44.043 に答える
1

を使用する限りNSGregorianCalendar、例えば

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

日付の計算では、そのカレンダーの微妙な点(実際には奇妙な点)を利用する必要があります。

例えば:

//  get your start date
NSDateComponents *components = [NSDateComponents new];
components.day = 1;
components.month = 5;
components.year = 2012;

NSCalendar *gregorian = [[NSCalendar alloc]
                         initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *date = [gregorian dateFromComponents:components];

//  add 7 days
NSDateComponents *addWeekComps = [NSDateComponents new];
components.day = 7;
NSDate *weekAddedDate = [gregorian dateByAddingComponents:addWeekComps toDate:date options:0];
于 2012-12-07T09:36:36.837 に答える