J'ai des objets de type Date ..
Donc, je veux les comparer, et j'ai écrit une condition si de la manière suivante ci-dessous
if(([startDate1 isEqualToDate:[self getDefaultDate]]) || (startDate1 != [ self getDefaultDate] && m_selectedDate >= m_currentDate1 && cycleStopped))
{
///execute some condition
}
Donc, si j'ai raison ou tort .. dans cette approche?
Une dernière chose à savoir si redresser cette voie est la bonne
if(dtdate > [m_array objectatIndex:i]
{
}
Parce que j'obtiens un comportement aléatoire ..
Alors aidez-moi, s'il vous plaît, amis et geeks
Cordialement Ranjit
Voici un exemple utilisant la méthode NSDate
, compare:
if([startDate compare: endDate] == NSOrderedDescending) // if start is later in time than end
{
// do something
}
De la référence de classe:
Si...
Le destinataire et anotherDate sont exactement égaux, NSOrderedSame.
Le destinataire est plus tardif que anotherDate, NSOrderedDescending.
Le destinataire est plus tôt que anotherDate, NSOrderedAscending.
Vous pouvez également utiliser la méthode timeIntervalSinceDate:
si vous souhaitez comparer deux dates et rechercher les secondes qui les séparent, par exemple.
MODIFIER:
if(([startDate1 compare:[self getDefaultDate]] == NSOrderedSame) || ([startDate1 compare: [self getDefaultDate]] != NSOrderedSame && (([m_selectedDate compare: m_currentDate1] == NSOrderedDescending) || [m_selectedDate compare: m_currentDate1] == NSOrderedSame) && cycleStopped))
Un moyen facile de comparer NSDates (trouvé ici 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
Et la mise en place:
#import "NSDate+Compare.h"
@implementation NSDate (Compare)
-(BOOL) isLaterThanOrEqualTo:(NSDate*)date {
return !([self compare:date] == NSOrderedAscending);
}
-(BOOL) isEarlierThanOrEqualTo:(NSDate*)date {
return !([self compare:date] == NSOrderedDescending);
}
-(BOOL) isLaterThan:(NSDate*)date {
return ([self compare:date] == NSOrderedDescending);
}
-(BOOL) isEarlierThan:(NSDate*)date {
return ([self compare:date] == NSOrderedAscending);
}
@end
Simple à utiliser:
if([aDateYouWant ToCompare isEarlierThanOrEqualTo:[NSDate date]]) // [NSDate date] is now
{
// do your thing ...
}
Prendre plaisir
Je dois admettre que je trouve la "comparaison" des affaires == NSWhatHaveYou trop compliquée à retenir (même si elle est correcte et qu'elle fonctionne). NSDate a deux autres méthodes que mon cerveau trouve beaucoup plus faciles à traiter: tôtDate et laterDate.
Considère ceci:
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");
}
L'une ou l'autre méthode retourne un objet NSDate, qui est plus tôt ou plus tard que l'autre.
J'ai bien aimé la réponse de Luke, et ça a fonctionné à merveille.
J'ai utilisé quelque chose comme ça:
If ([enteredDate compare: [NSDate Date]]== NSOrderedSame || NSOrderedDescending)
{
//Do Something if the enteredDate is later or the same as today
}else
{
//if the enteredDate is before today's date
}
Je ne suis pas sûr que cela aide, mais je tiens à répéter ce que Luke avait écrit.
C'est un moyen simple de vérifier si la date que vous pensez est plus grande (par exemple, à l'avenir) par rapport à la date que vous pensez être plus tôt. Voici ce que cela fait.
Voici
- (BOOL)isDateGreaterThanDate:(NSDate*)greaterDate and:(NSDate*)lesserDate{
NSTimeInterval greaterDateInterval = [greaterDate timeIntervalSince1970];
NSTimeInterval lesserDateInterval = [lesserDate timeIntervalSince1970];
if (greaterDateInterval > lesserDateInterval)
return YES;
return NO;
}
Cela fonctionne aussi
BOOL *isGreaterDateTruelyGreater = [greaterDate timeIntervalSince1970] > [lesserDate timeIntervalSince1970];
La façon dont objective-c traite les dates est moins qu'intuitive. Fondamentalement, vous pouvez utiliser NSTimeInterval pour obtenir le nombre de secondes à partir d'un instant donné. Il donne généralement un nombre long, par exemple, au moment où j'écris ceci, 1351026414.640865 correspond à l'intervalle de temps à partir de 1970.
Point dans le temps> Point dans le temps
Ce lien le montre de la meilleure façon:
http://www.myuiviews.com/2011/01/10/nsdate-comparison-which-is-older.html