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 NSDate
objetos 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 , NSDateFormatter
convierte la hora de la zona horaria configurada. Por lo tanto, el número de segundos entre dos NSDate
objetos 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.
cocoa
y no,cocoa-touch
por 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
NSDate
los 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 losNSDate
objetos representen momentos exactos en el tiempo. Por lo tanto, si ya tienestartDate
yendDate
, estos dos objetos estarán separados por x segundos. Las zonas horarias no tendrán nada que ver con eso.donde
date1
ydate2
sonNSDate
.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
Calendar
eldateComponents(_:from:to:)
método de# 2. Usando
DateComponentsFormatter
elstring(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