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. 如果星期几与 selected 中的匹配UITableViewCell,您就完成了。
  4. 否则,添加一天NSDate这里是如何完成的),然后返回步骤 2。
于 2013-09-16T16:52:23.530 回答