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);
EDITAR:
Recuerde, los NSDateobjetos representan momentos exactos de tiempo, no tienen ninguna información de zona horaria asociada. Cuando convierte una cadena en una fecha usando, por ejemplo NSDateFormatter, an , NSDateFormatterconvierte la hora de la zona horaria configurada. Por lo tanto, el número de segundos entre dos NSDateobjetos siempre será independiente de la zona horaria.
Además, esta documentación especifica que la implementación del tiempo de Cocoa no tiene en cuenta los segundos intercalares, por lo que si necesita tal precisión, deberá implementar su propia implementación.
cocoay no,cocoa-touchpor lo que esta respuesta solo se aplica a Mac OS X.Es posible que desee utilizar algo como esto:
Creo que este método tiene en cuenta situaciones como las fechas que abarcan un cambio en el horario de verano.
fuente
NSDatelos objetos ya son independientes de la zona horaria. La información de la zona horaria se elimina al analizar las fechas conNSDateFormatter, por ejemplo , para que losNSDateobjetos representen momentos exactos en el tiempo. Por lo tanto, si ya tienestartDateyendDate, estos dos objetos estarán separados por x segundos. Las zonas horarias no tendrán nada que ver con eso.donde
date1ydate2sonNSDate.Además, tenga en cuenta la definición de
NSTimeInterval:fuente
Mira esto. Se encarga del horario de verano, año bisiesto, ya que usó el calendario de iOS para calcular. Puede cambiar la cadena y las condiciones para incluir minutos con horas y días.
fuente
Con Swift 5 y iOS 12, según sus necesidades, puede usar una de las dos formas siguientes para encontrar la diferencia entre dos fechas en días.
# 1. Usando
CalendareldateComponents(_:from:to:)método de# 2. Usando
DateComponentsFormatterelstring(from:to:)método defuente
Swift 4
Pruebe esto y vea (rango de fechas con String):
Swift 3
fuente
Puede encontrar la diferencia convirtiendo la fecha en segundos y tomar el intervalo de tiempo desde 1970 para esto y luego puede encontrar la diferencia entre dos fechas.
fuente
Para encontrar la diferencia, debe obtener la fecha actual y la fecha futura. En el siguiente caso, utilicé 2 días como ejemplo de la fecha futura. Calculado por:
2 days*24 hours*60 minutes*60 seconds. Esperamos que la cantidad de segundos en 2 días sea 172,800.fuente