Diferencia entre dos objetos NSDate – Resultado también un NSDate

Tengo dos objetos NSDate y quiero la diferencia entre los dos y el resultado debe ser nuevamente un objeto NSDate. ¿Alguna idea de cómo lograr esto?

Aquí, bash abordar un problema único en el que tengo que averiguar el tiempo transcurrido y luego localizar el tiempo transcurrido. Puedo localizarlo si tengo el tiempo transcurrido en el objeto NSDate. Así que pensé en crear un objeto NSDate que tenga su componente de tiempo igual al intervalo de tiempo entre las dos fechas para poder usar NSDateFormatter para localizarlo.

NSDate representa una instancia en el tiempo, por lo que no tiene sentido representar un intervalo de tiempo como NSDate . Lo que quieres es NSDateComponents :

 NSDate *dateA; NSDate *dateB; NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:dateA toDate:dateB options:0]; NSLog(@"Difference in date components: %i/%i/%i", components.day, components.month, components.year); 

Si resta 12/12/2001 del 05/05/2002 ¿cuál será la fecha? La distancia cronológica entre dos fechas no puede ser una fecha, siempre es un tipo de intervalo. Puede usar timeIntervalSinceDate: para calcular el intervalo.

Para localizar, puede intentar los siguientes pasos:

  • Puede usar NSCalendar con dateFromComponents: pasar NSDateComponents .

  • Para desglosar un timeInterval en NSDateComponents mira ¿Cómo se descompone un NSTimeInterval en año, meses, días, horas, minutos y segundos en iPhone? .

  • Finalmente use NSDateFormatter e initWithDateFormat: allowNaturalLanguage: para obtener su cadena localizada. La syntax de cadenas de formato de fecha muestra los diferentes marcadores de posición.

Desde la referencia de clase NSDate , tiene métodos de instancia para hacer esto:

  1. ¿Cómo comparar dos variables de NSDate? Respuesta: isEqualToDate:
  2. ¿Cómo encontrar la diferencia entre dos variables NSDate? Respuesta: timeIntervalSinceDate:
  3. ¿Cómo obtener cada valor separado de minutos, horas y días de la variable NSDate? campo de golf

Puede calcular el intervalo de tiempo entre dos fechas usando NSDate de timeIntervalSinceDate: pero no tiene sentido que represente un intervalo de tiempo como una fecha.

Hay una manera fácil de usar -compare: en NSDate:

 NSDate *dateA = [NSDate dateWithTimeIntervalSinceNow:100]; NSDate *dateB = [NSDate dateWithTimeIntervalSinceNow:200]; NSDate *myDate = [NSDate dateWithTimeIntervalSinceNow:150]; NSArray *dateArray = [NSArray arrayWithObjects:dateA, dateB, myDate, nil]; NSArray *sortedArray = [dateArray sortedArrayUsingSelector:@selector(compare:)]; if ([myDate isEqualToDate:[sortedArray objectAtIndex:1]]) NSLog(@"myDatea between dateA and dateB");