Как я могу рассчитать разницу между двумя датами?

Как я могу рассчитать дни между 1 января 2010 года и (например) 3 февраля 2010 года?

NSDate *date1 = [NSDate dateWithString:@"2010-01-01 00:00:00 +0000"]; NSDate *date2 = [NSDate dateWithString:@"2010-02-03 00:00:00 +0000"]; NSTimeInterval secondsBetween = [date2 timeIntervalSinceDate:date1]; int numberOfDays = secondsBetween / 86400; NSLog(@"There are %d days in between the two dates.", numberOfDays); 

РЕДАКТИРОВАТЬ:

Помните, NSDate объекты NSDate представляют собой точные моменты времени, они не имеют связанной информации о часовых NSDate . Когда вы конвертируете строку в дату, используя, например, NSDateFormatter , NSDateFormatter преобразует время из настроенного часового пояса. Следовательно, количество секунд между двумя объектами NSDate всегда будет агностическим по времени.

Кроме того, в этой документации указывается, что время выполнения Cocoa не учитывает скачки секунд, поэтому, если вам нужна такая точность, вам нужно будет выполнить собственную реализацию.

Вы можете использовать что-то вроде этого:

 NSDateComponents *components; NSInteger days; components = [[NSCalendar currentCalendar] components: NSDayCalendarUnit fromDate: startDate toDate: endDate options: 0]; days = [components day]; 

Я считаю, что этот метод учитывает такие ситуации, как даты, которые изменяют переход на летнее время.

 NSTimeInterval diff = [date2 timeIntervalSinceDate:date1]; // in seconds 

где date1 и date1 являются NSDate .

Также обратите внимание на определение NSTimeInterval :

 typedef double NSTimeInterval; 

Проверьте это. Он заботится о летнем свете, високосный год, поскольку он использовал календарь iOS для расчета. Вы можете изменить строку и условия, включая минуты с часами и днями.

 +(NSString*)remaningTime:(NSDate*)startDate endDate:(NSDate*)endDate { NSDateComponents *components; NSInteger days; NSInteger hour; NSInteger minutes; NSString *durationString; components = [[NSCalendar currentCalendar] components: NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute fromDate: startDate toDate: endDate options: 0]; days = [components day]; hour = [components hour]; minutes = [components minute]; if(days>0) { if(days>1) durationString=[NSString stringWithFormat:@"%d days",days]; else durationString=[NSString stringWithFormat:@"%d day",days]; return durationString; } if(hour>0) { if(hour>1) durationString=[NSString stringWithFormat:@"%d hours",hour]; else durationString=[NSString stringWithFormat:@"%d hour",hour]; return durationString; } if(minutes>0) { if(minutes>1) durationString = [NSString stringWithFormat:@"%d minutes",minutes]; else durationString = [NSString stringWithFormat:@"%d minute",minutes]; return durationString; } return @""; } 

Swift 4
Попробуйте это и посмотрите (диапазон дат со строкой):

 // Start & End date string let startingAt = "01/01/2018" let endingAt = "08/03/2018" // Sample date formatter let dateFormatter = DateFormatter() dateFormatter.dateFormat = "dd/MM/yyyy" // start and end date object from string dates var startDate = dateFormatter.date(from: startingAt) ?? Date() let endDate = dateFormatter.date(from: endingAt) ?? Date() // Actual operational logic var dateRange: [String] = [] while startDate <= endDate { let stringDate = dateFormatter.string(from: startDate) startDate = Calendar.current.date(byAdding: .day, value: 1, to: startDate) ?? Date() dateRange.append(stringDate) } print("Resulting Array - \(dateRange)") 

Swift 3

 var date1 = Date(string: "2010-01-01 00:00:00 +0000") var date2 = Date(string: "2010-02-03 00:00:00 +0000") var secondsBetween: TimeInterval = date2.timeIntervalSince(date1) var numberOfDays: Int = secondsBetween / 86400 print(numberOfDays) 

Вы можете найти разницу, изменив дату в секундах и займите временной интервал с 1970 года для этого, а затем вы можете найти разницу между двумя датами.

  • Suppress warning "Категория реализует метод, который также будет реализован его основным classом"
  • Код примера Objective-C для HMAC-SHA1
  • Префикс имен свойств с подчеркиванием в Objective C
  • Кроссплатформенный обмен кодами iPhone / Android
  • Зачем писать 1000 000 000 как 1000 * 1000 * 1000 в C?
  • Objective C - получение номера строки или полной трассировки стека из-за ошибки отладчика?
  • Преимущества и недостатки #define против констант?
  • Извлечение текста pdf в Objective C
  • Что такое Objective C ++?
  • Свойство NSString: скопировать или сохранить?
  • Поиск через NSString с использованием регулярного выражения
  • Давайте будем гением компьютера.