Увеличить NSDate +1 день по методу Objective-C? - PullRequest
12 голосов
/ 23 мая 2011

Это мой метод, который я использую для увеличения на один день в панели навигации и установки названия дня в качестве заголовка.Я знаю, что это неправильно, потому что я устанавливаю переменную "сегодня" каждый раз, когда она вызывается.Но я не могу понять, как увеличить +1 день каждый раз, когда я вызываю этот метод.

-(void)stepToNextDay:(id)sender
{
    today = [NSDate date];
    NSDate *datePlusOneDay = [today dateByAddibgTimeInterval:(60 * 60 * 24)];
    NSDateFormatter *dateformatterBehaviour = [[[NSDateFormatter alloc]init]autorelease];
    [dateFormatter setDateFormat:@"EEEE"];
    NSString *dateString = [dateFormatter stringFromDate:datePlusOneDay];
    self.navigationItem.title = datestring;
}

Ответы [ 2 ]

30 голосов
/ 23 мая 2011

Сохраните дату, которую вы показываете, в свойстве (ivar, ...) вашего контроллера представления.Таким образом, вы можете получить текущую настройку при переходе на следующий день.

Если вы хотите надежно добавить даты, используйте NSCalendar и NSDateComponents, чтобы получить единицу «1 день», и добавьте ее к текущей дате.

NSCalendar*       calendar = [[[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar] autorelease];
NSDateComponents* components = [[[NSDateComponents alloc] init] autorelease];
components.day = 1;
NSDate* newDate = [calendar dateByAddingComponents: components toDate: self.date options: 0];
3 голосов
/ 05 декабря 2014

Начиная с iOS 8 NSGregorianCalendar исключен, обновленный ответ будет:

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDateComponents *components = [[NSDateComponents alloc] init];
components.day = 1;
NSDate *newDate = [calendar dateByAddingComponents:components toDate:today options:0];

Swift Code:

var today:NSDate = NSDate()
let calender:NSCalendar! = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
var components:NSDateComponents = NSDateComponents()
components.setValue(1, forComponent: NSCalendarUnit.CalendarUnitDay)
var newDate:NSDate! = calender.dateByAddingComponents(components, toDate:today, options: NSCalendarOptions(0))
...