从工作日获取日期

时间:2013-09-16 16:46:02

标签: ios objective-c nsdate

我正在做这个用户输入几天的应用程序(使用UITableView,星期一 - 星期日)。 然后,我需要该应用程序来确定与之匹配的日期。假设用户坐在星期日15日,并选择星期一和星期二。该应用程序将确定日期是星期一16日和星期二17日。

如何使用NSDate等进行此操作?我知道如何使用日期找到工作日,但我想要相反。

当然,它必须是最接近的日子,比如没有找到23日星期一,而是找到第16名。

希望这是有道理的。 : - )

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

您可以按照以下简单程序来完成:

  1. 从代表今天的NSDate开始
  2. 从中获取星期几(here is how it is done
  3. 如果星期几与所选UITableViewCell中的日期匹配,则表示您已完成。
  4. 否则,请在NSDatehere is how it is done)中添加一天,然后返回第2步。