Как мы можем получить следующую дату от введенной даты на основе заданного периода повторения? - PullRequest
1 голос
/ 13 июля 2011

Я новичок в iPhone.

Я хочу узнать следующую дату от заданной даты на основе повторного периода.

Например:

Я хочу функционировать следующим образом ...

  • заданная дата: 31 мая 2011 года и Повтор: ежемесячно в качестве аргумента, тогда должна быть возвращена следующая дата 31'июля 2011 ( а у июня нет 31-го дня)

  • И функция должна быть достаточно умной, чтобы рассчитывать также следующий день високосного года, если заданная дата: 29 февраля 2008 года и Repeat: Yearly , заданная в качестве аргумента, затем следующая дата должна быть возвращена 29 февраля 2012 года (следующий високосный день)

  • И т. Д. Опция повторения может быть одной из следующих: Ежедневно, Еженедельно (В выбранный день недели), Ежемесячно, Ежегодно, Нет (Повторение вообще не производится)

Ответы [ 3 ]

3 голосов
/ 13 июля 2011
// start by retrieving day, weekday, month and year components for yourDate
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *todayComponents = [gregorian components:(NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit) yourDate];
NSInteger theDay = [todayComponents day];
NSInteger theMonth = [todayComponents month];
NSInteger theYear = [todayComponents year];

// now build a NSDate object for yourDate using these components
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setDay:theDay]; 
[components setMonth:theMonth]; 
[components setYear:theYear];
NSDate *thisDate = [gregorian dateFromComponents:components];
[components release];

// now build a NSDate object for the next day
NSDateComponents *offsetComponents = [[NSDateComponents alloc] init];
[offsetComponents setDay:1];
NSDate *nextDate = [gregorian dateByAddingComponents:offsetComponents toDate: yourDate options:0];
[offsetComponents release];
[gregorian release];

Это скопировано с Как я могу получить следующую дату, используя NSDate? , и кредит идет на @ Massimo Cafaro для этого ответа.

0 голосов
/ 13 июля 2011

попробуйте это: -

- (NSDate *)dateFromDaysOffset:(NSInteger)daysOffset
{
    // start by retrieving day, weekday, month and year components for yourDate
    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

    NSDateComponents *offsetComponents = [[NSDateComponents alloc] init];
    [offsetComponents setDay:daysOffset];
    NSDate *offsetDate = [gregorian dateByAddingComponents:offsetComponents toDate:self options:0];
    [offsetComponents release];
    [gregorian release];    

    return offsetDate;
}
0 голосов
/ 13 июля 2011

Чтобы получить завтрашнюю дату, используйте метод dateByAddingTimeInterval .

// Start with today
NSDate *today = [NSDate date];

// Add on the number of seconds in a day
NSTimeInterval oneDay = 60 * 60 * 24;
NSDate *tomorrow = [today dateByAddingTimeInterval:oneDay];

Продлить это до недели и т. Д.

NSTimeInterval oneWeek = oneDay * 7;
NSDate *nextWeek = [today dateByAddingTimeInterval:oneWeek];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...