我正在做这个应用程序,用户输入几天(使用 UITableView,周一 - 周日)。然后,我需要该应用程序来确定与哪些日期匹配。假设用户在 15 号星期日坐下并选择星期一和星期二。该应用程序将确定日期是 16 日星期一和 17 日星期二。
使用 NSDate 之类的怎么办?我知道如何使用日期找到工作日,但我想要相反。
当然它必须是最近的日子,比如不是找到 23 号星期一,而是找到 16 号。
希望这是有道理的。:-)
我正在做这个应用程序,用户输入几天(使用 UITableView,周一 - 周日)。然后,我需要该应用程序来确定与哪些日期匹配。假设用户在 15 号星期日坐下并选择星期一和星期二。该应用程序将确定日期是 16 日星期一和 17 日星期二。
使用 NSDate 之类的怎么办?我知道如何使用日期找到工作日,但我想要相反。
当然它必须是最近的日子,比如不是找到 23 号星期一,而是找到 16 号。
希望这是有道理的。:-)
直接方法,不使用循环:
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;