NSDate получает предыдущую неделю, выпуск предыдущего месяца
Мне нужно получить предыдущую неделю и месяц с текущей даты.
Итак, я нашел решение, которое может пересчитать текущий интервал добавления даты
- dateByAddingTimeInterval
И этот параметр для него:
[[NSDate date] dateByAddingTimeInterval: -604800.0]
(для получения предыдущей недели)
[[NSDate date] dateByAddingTimeInterval: -2629743.83]
(для получения предыдущего месяца)
Как я думаю, для получения недели этот метод работает без проблем, потому что каждая неделя имеет семь дней, а интервал не меняется. Но в течение месяца у нас есть проблема, потому что каждый месяц имеет разное количество дней.
Ответы
Ответ 1
Используя NSDateComponents
, было бы легко и точно
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *comps = [NSDateComponents new];
comps.month = -1;
comps.day = -1;
NSDate *date = [calendar dateByAddingComponents:comps toDate:[NSDate date] options:0];
NSDateComponents *components = [calendar components:NSMonthCalendarUnit|NSDayCalendarUnit fromDate:date]; // Get necessary date components
NSLog(@"Previous month: %d",[components month]);
NSLog(@"Previous day : %d",[components day]);
Ответ 2
Не используйте 903484 и -23484 для изменения даты
Сделайте так:
NSCalendar *gregorian=[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components=[[NSDateComponents alloc] init];
components.month=1;//next month
components.month=-1;//previous month
//similarly +1 and -1 will give you week and month day etc
components.week=1;
components.day=1;
NSDate *myMonth=[gregorian dateByAddingComponents:components toDate:today options:0];
NSDateComponents *components = [calendar components:NSMonthCalendarUnit|NSDayCalendarUnit fromDate:date];
NSInteger yourRequiredValue=[components day]; //day, month, week etc