Я знаю, что есть некоторые вопросы, подобные этому, но я просто не могу найти, что не так с моим кодом.NSDateComponents/NSDate: получить последнее воскресенье
В принципе, я хочу, если сегодня не в воскресенье, currentDate устанавливается на последнее воскресенье. Если сегодня воскресенье, то currentDate устанавливается на воскресенье раньше.
Вот как я пытаюсь это сделать.
NSDateComponents *components = [[NSCalendar currentCalendar] components: NSWeekCalendarUnit | NSYearCalendarUnit | NSWeekdayCalendarUnit fromDate:currentDate];
if (components.weekday == 1) { //Its sunday. We just need to subtract a week
[components setWeek: -1];
currentDate = [[NSCalendar currentCalendar] dateByAddingComponents:components toDate:currentDate options:0];
}else{ //If its not sunday we just go to sunday
[components setWeekday: 1];
currentDate = [[NSCalendar currentCalendar] dateFromComponents:components];
}
В первый раз, когда эта часть кода выполнена, я получаю правильный ответ. После первого раза я получаю странные даты, например, 02 декабря 4026 года, и год продолжает расти.
Вот код, который сделал его работу:
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components: (NSWeekCalendarUnit | NSWeekdayCalendarUnit | NSYearCalendarUnit) fromDate:currentDate];
int weekday = components.weekday;
if (weekday == 1) {
[components setWeek:components.week -1];
}else{
[components setWeekday:1];
}
currentDate = [calendar dateFromComponents:components];
Почему вы установили неделю как '-1'? Если вы хотите получить на прошлой неделе, просто 'components.week - = 1;' –
Я использую dateByAddingComponents и устанавливаю день -1, чтобы получить последний день, я думал, что установить неделю -1, когда добавлено получить las неделю. –