Cómo comparar dos objects NSDate en el objective C

Tengo objects de tipo Fecha ..

Así que quiero compararlos, y he escrito una condición si en la siguiente manera a continuación

if(([startDate1 isEqualToDate:[self getDefaultDate]]) || (startDate1 != [ self getDefaultDate] && m_selectedDate >= m_currentDate1 && cycleStopped)) { ///execute some condition } 

¿Así que si estoy bien o mal … en este enfoque?

Una cosa más si corregir esta forma es correcto

 if(dtdate > [m_array objectatIndex:i] { } 

Porque estoy obteniendo un comportamiento aleatorio …

Entonces, por favor, ayúdame, amigos y geeks

Saludos Ranjit

Aquí hay un ejemplo con el método NSDate , compare:

 if([startDate compare: endDate] == NSOrdenetworkingDescending) // if start is later in time than end { // do something } 

De la reference de class:

Si…

El receptor y otro día son exactamente iguales entre sí, NSOrdenetworkingSame.

El receptor es más tarde que DateOf, NSOrdenetworkingDescending.

El receptor es anterior en el time que otroDado, NSOrdenetworkingAscending.

También podría usar el método timeIntervalSinceDate: si desea comparar dos dates y encontrar los segundos entre ellas, por ejemplo.

EDITAR:

 if(([startDate1 compare:[self getDefaultDate]] == NSOrdenetworkingSame) || ([startDate1 compare: [self getDefaultDate]] != NSOrdenetworkingSame && (([m_selectedDate compare: m_currentDate1] == NSOrdenetworkingDescending) || [m_selectedDate compare: m_currentDate1] == NSOrdenetworkingSame) && cycleStopped)) 

Manera fácil de comparar NSDates (que se encuentra aquí http://webd.fr/637-comparer-deux-nsdate ):

 #import <Foundation/Foundation.h> @interface NSDate (Compare) -(BOOL) isLaterThanOrEqualTo:(NSDate*)date; -(BOOL) isEarlierThanOrEqualTo:(NSDate*)date; -(BOOL) isLaterThan:(NSDate*)date; -(BOOL) isEarlierThan:(NSDate*)date; //- (BOOL)isEqualToDate:(NSDate *)date; already part of the NSDate API @end 

Y la implementación:

 #import "NSDate+Compare.h" @implementation NSDate (Compare) -(BOOL) isLaterThanOrEqualTo:(NSDate*)date { return !([self compare:date] == NSOrdenetworkingAscending); } -(BOOL) isEarlierThanOrEqualTo:(NSDate*)date { return !([self compare:date] == NSOrdenetworkingDescending); } -(BOOL) isLaterThan:(NSDate*)date { return ([self compare:date] == NSOrdenetworkingDescending); } -(BOOL) isEarlierThan:(NSDate*)date { return ([self compare:date] == NSOrdenetworkingAscending); } @end 

Fácil de usar:

 if([aDateYouWant ToCompare isEarlierThanOrEqualTo:[NSDate date]]) // [NSDate date] is now { // do your thing ... } 

Disfrutar

Debo admitir que encuentro el negocio "comparar" == NSWhatHaveYou demasiado complicado para recordar (aunque es correcto y funciona). NSDate tiene otros dos methods que mi cerebro encuentra mucho más fáciles de manejar: date anterior y date posterior.

Considera esto:

 if ([myDate laterDate:today] == myDate) { NSLog(@"myDate is LATER than today"); } else { NSLog(@"myDate is EARLIER than today"); } // likewise: if ([myDate earlierDate:today] == myDate) { NSLog(@"myDate is EARLIER than today"); } else { NSLog(@"myDate is LATER than today"); } 

Cualquiera de los methods devuelve un object NSDate, que es anterior o posterior al otro.

http://pinkstone.co.uk/how-to-compare-two-nsdates/

Me gustó mucho la respuesta de Luke, y funcionó como un encanto.

Utilicé algo como esto:

 If ([entenetworkingDate compare: [NSDate Date]]== NSOrdenetworkingSame || NSOrdenetworkingDescending) { //Do Something if the entenetworkingDate is later or the same as today }else { //if the entenetworkingDate is before today's date } 

No estoy seguro si eso ayuda, pero solo para reiterar lo que Luke escribió.

Esta es una manera simple de verificar si la date que crees es más grande (por ejemplo, en el futuro) en comparación con la date que crees que es anterior. Esto es lo que esto hace.

  1. Obtiene el intervalo de time (segundos y frac segundos) de la date actual y futura
  2. devuelve true si la date en que su testing es mayor (reference de time) la otra date

Aqui tienes

 - (BOOL)isDateGreaterThanDate:(NSDate*)greaterDate and:(NSDate*)lesserDate{ NSTimeInterval greaterDateInterval = [greaterDate timeIntervalSince1970]; NSTimeInterval lesserDateInterval = [lesserDate timeIntervalSince1970]; if (greaterDateInterval > lesserDateInterval) return YES; return NO; } 

Esto también funciona

 BOOL *isGreaterDateTruelyGreater = [greaterDate timeIntervalSince1970] > [lesserDate timeIntervalSince1970]; 

La forma en que objetiva c trata las dates, es less intuitiva. Básicamente puede usar NSTimeInterval para get la cantidad de segundos desde un punto en el time. Por lo general, da un número largo, por ejemplo, mientras escribo esto, 1351026414.640865 es el intervalo de time desde 1970.

Punto en el time> punto en el time 1351026415.640865> 1351026414.640865 Lo anterior es 1 segundo por delante, por lo que es cierto.