Я создаю таймер обратного отсчета до определенной даты, используя NSDate
и NSDateFormatter
. Единственная проблема заключается в том, что когда я запускаю код с другим форматом, дата испортится. Вот оригинальный код, который отлично работает.NSDate выдает неправильную дату
- (void)updateCountdown {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"YYYY-MM-dd"];
NSDate *startingDate = [dateFormatter dateFromString:@"2014-10-08"];
NSDate *endingDate = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSUInteger unitFlags = NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit;
NSDateComponents *dateComponents = [calendar components:unitFlags fromDate:startingDate toDate:endingDate options:0];
NSInteger days = [dateComponents day];
NSInteger months = [dateComponents month];
NSInteger years = [dateComponents year];
NSInteger hours = [dateComponents hour];
NSInteger minutes = [dateComponents minute];
NSInteger seconds = [dateComponents second];
NSString *countdownText = [NSString stringWithFormat:@"%ld Years %ld Months %ld Days %ld Hours %ld Minutes %ld Seconds", (long)days, (long)months, (long)years, (long)hours, (long)minutes, (long)seconds];
_countdown.text = countdownText;
[self performSelector:@selector(updateCountdown) withObject:nil afterDelay:1];
}
Но сказать, что я хочу, чтобы удалить лет, так что я изменить код так:
- (void)updateCountdown {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"YYYY-MM-dd"];
NSDate *startingDate = [dateFormatter dateFromString:@"2014-10-08"];
NSDate *endingDate = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSUInteger unitFlags = NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit;
NSDateComponents *dateComponents = [calendar components:unitFlags fromDate:startingDate toDate:endingDate options:0];
NSInteger days = [dateComponents day];
NSInteger months = [dateComponents month];
NSInteger hours = [dateComponents hour];
NSInteger minutes = [dateComponents minute];
NSInteger seconds = [dateComponents second];
NSString *countdownText = [NSString stringWithFormat:@"%ld Months %ld Days %ld Hours %ld Minutes %ld Seconds", (long)days, (long)months, (long)hours, (long)minutes, (long)seconds];
_countdown.text = countdownText;
[self performSelector:@selector(updateCountdown) withObject:nil afterDelay:1];
}
Теперь все вдруг Дат перепутались на целый месяц. Как я могу это исправить?
Также почему вывод 0 лет 1месяц 0 дней -2 часа. Как и почему там (-) там? Благодаря!
духа! Спасибо огромное! Также вы знаете, почему вывод -1 дней -2 часа -1 минут? Как вы знаете, почему там есть минусы? Спасибо огромное! – Nicholas
Ну, негативы, вероятно, связаны с тем, что это обратный отсчет. поэтому, если я рассчитываю на то, что было вчера, это будет -1 день и т. д. Посмотрите на свой код, возможно, вы сравниваете свои 2 даты, чтобы сравнивать их в неправильном порядке. Это мое предположение. – RyanTCB
Да, это то, о чем я думал, кроме факта, что дата у меня есть в будущем! lol – Nicholas