指定された 2 つの日付の間の土曜日の日付のみを取得しようとしています。
これどうやってするの?
残念ながら、2 つの日付間をループする直接的な方法はなく、NSDate オブジェクトから直接曜日を取得することはできません。したがって、それを機能させるには、さらに数行を追加する必要があります。ここで重要なのは、NSDateComponents を使用することです。この例では、グレゴリオ暦を使用しています。デフォルトでは、Apple のドキュメントによると、平日は 1 日目 (文字通り 1) である日曜日から始まります。日曜日がゼロであるとは考えないでください (混乱するのはよくあることです)。
土曜日は週の 7 日目なので、整数 7 であると言えます。コードは次のとおりです。これから、クラス/カテゴリに追加するメソッドを簡単に作成し、確認したい曜日をパラメーターとして渡すことができます。
NSInteger count = 0;
NSInteger saturday = 7;
// Set the incremental interval for each interaction.
NSDateComponents *oneDay = [[NSDateComponents alloc] init];
[oneDay setDay:1];
// Using a Gregorian calendar.
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *currentDate = fromDate;
// Iterate from fromDate until toDate
while ([currentDate compare:toDate] == NSOrderedAscending) {
NSDateComponents *dateComponents = [calendar components:NSWeekdayCalendarUnit fromDate:currentDate];
if (dateComponents.weekday == saturday) {
count++;
}
// "Increment" currentDate by one day.
currentDate = [calendar dateByAddingComponents:oneDay
toDate:currentDate
options:0];
}
NSLog(@"count = %d", count);