2015-04-14 1 views
2

Я хочу обновить ярлык, показывающий время, оставшееся между 2 нсдатами everysecond.iOS) значение timeIntervalSince70 фиксируется, когда я приближаюсь на уровне второго

мой код ниже:

NSDate *nowDate = [NSDate date]; 
double diff = [campaignDate timeIntervalSince1970] - [nowDate timeIntervalSince1970]; 

int diff_day = diff/60/60/24 - 1; 
int diff_hour = ((int)diff/60/60)%24; 
int diff_min = ((int)diff/60)%60; 
int diff_sec = ((int)diff/60/60)%60; 

Когда я вошел diff_sec, он всегда показывает мне 49 день, час и мин значение выводится в рабочем состоянии

почему это diff_sec сделать проблему? есть ли какое-нибудь решение?

+0

И я уже проверил, что двойное значение дифференциала меняется каждый второй на уровне millesecond – LKM

+0

формата 2 nsdates такое же – LKM

+0

Вместо ' timeIntervalSince1970' на каждую дату использовать 'timeIntervalSinceNow'. 'NSTimeInterval diff = - [campaignDate timeIntervalSinceNow];' – zaph

ответ

3

Я думаю, вы должны использовать NSDateComponents, чтобы получить количество дней/часов/минут/секунд между двух дней.

Тогда вы можете получить время remaing так:

NSDate *fromDate = [NSDate date]; 
NSDate *toDate = [NSDate dateWithTimeIntervalSinceNow:12345]; 

NSCalendar *calendar = [NSCalendar currentCalendar]; 

NSDateComponents *difference = [calendar components:NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond fromDate:fromDate toDate:toDate options:0]; 

NSLog(@"Event in %@ days, %@:%@:%@", @(difference.day), @(difference.hour), @(difference.minute), @(difference.second)); 
+0

вы сделали это спасибо! можете ли вы объяснить, почему мой код в проблеме? – LKM

+0

Интересно, преобразование целых чисел в 'NSNumbers' только для использования'% @' вместо того, чтобы просто использовать% i, как в ответе @N J Gadhiya. – zaph

+0

LKM: Может быть, в секундах это может быть просто ((int) diff)% 60? Но я не уверен. Я предпочитаю использовать NSDateComponents. Вы можете проверить это на сайте NSHipster: http://nshipster.com/nsdatecomponents/ и http://nshipster.com/nscalendar-additions/ –

0

Использование NSCalendar

NSDate *dateA; 
NSDate *dateB; 

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit 
              fromDate:dateA 
              toDate:dateB 
              options:0]; 

NSLog(@"Difference in date components: %i/%i/%i", components.day, components.month, components.year); 
+0

Я думаю, что это действительно не работает – LKM

+0

Вопрос: день, час, минута, секунды не день, месяц, год. – zaph

0

Ошибка при расчете diff_sec, отделы по 60 неверны, потому что diff уже в секундах.

Неверный код:

int diff_sec = ((int)diff/60/60)%60; 

Правильный код

int diff_sec = ((int)diff)%60; 
Смежные вопросы