0

ユーザーが数日入力するこのアプリを実行しています(UITableViewを使用して、月曜日から日曜日まで)。次に、これがどの日付と一致するかをアプリで把握する必要があります。ユーザーが 15 日の日曜日に座っていて、月曜日と火曜日を選択したとします。アプリは、日付が 16 日の月曜日と 17 日の火曜日であることを把握します。

NSDate などを使用してそれを行うにはどうすればよいでしょうか。日付を使用して平日を見つける方法は知っていますが、その逆が必要です。

もちろん、23 日の月曜日ではなく 16 日のように、最も近い日でなければなりません。

それが理にかなっていることを願っています。:-)

4

2 に答える 2

2

ループを使用しない直接的な方法:

NSUInteger targetWeekday = ...; // 1 = Sunday, 2 = Monday, ...

// Date components for today:
NSCalendar *cal = [NSCalendar currentCalendar];
NSDate *now = [NSDate date];
NSDateComponents *comp = [cal components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit|NSWeekdayCalendarUnit
                                fromDate:now];

// Adjust components for target weekday:
if (targetWeekday >= comp.weekday) {
    comp.day += (targetWeekday - comp.weekday);
} else {
    comp.day += (targetWeekday + 7 - comp.weekday); // Assuming 7 days per week.
}
comp.weekday = targetWeekday;

// And back to NSDate:
NSDate *targetDate = [cal dateFromComponents:comp];

述べる:

if (targetWeekday >= comp.weekday) {
    comp.day += (targetWeekday - comp.weekday);
} else {
    comp.day += (targetWeekday + 7 - comp.weekday); // Assuming 7 days per week.
}

より短い同等のコードに置き換えることができます

comp.day += (targetWeekday + 7 - comp.weekday) % 7;
于 2013-09-16T17:12:53.043 に答える
0

次の簡単な手順で実行できます。

  1. NSDate今日を表す から始める
  2. それから曜日を取得します(これがどのように行われるかです
  3. 曜日が選択した内容と一致するUITableViewCell場合は、完了です。
  4. それ以外の場合は、 に 1 日を追加しNSDate(これがその方法です)、ステップ 2 に戻ります。
于 2013-09-16T16:52:23.530 に答える