如何比较目标C中的两个NSDate对象

我有datetypes的对象..

所以我想比较他们,我已经写了一个如下条件在下面的方式

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

所以,无论我是对还是错?

还有一件事是否正确

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

因为我得到一个随机的行为..

所以请帮助我的朋友和极客

关心Ranjit

这是一个使用NSDate方法的例子, compare:

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

从类参考:

如果…

接收者和另一个date完全相等,NSOrderedSame。

接收者晚于其他date,NSOrderedDescending。

接收者比另一个时间更早,NSOrderedAscending。

例如,如果您想比较两个date并查找它们之间的秒数,则还可以使用timeIntervalSinceDate:方法。

编辑:

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

简单的方法来比较NSDates(在这里findhttp://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 

并执行:

 #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 

简单易用:

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

请享用

我必须承认,我发现“比较”== NSWhatHaveYou业务过于复杂,不能记住(即使它是正确的,它的工作原理)。 NSDate有另外两种方法可以让我的大脑更容易处理:earlyDate和laterDate。

考虑一下:

 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"); } 

两种方法都会返回一个NSDate对象,它比其他的要早或晚。

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

我真的很喜欢卢克的答案,它的作用像一个魅力。

我用了这样的东西:

 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 } 

我不确定这是否有帮助,但只是重申了卢克写的。

这是一个简单的方法来检查你认为的date是否比你想象的更早(比如说将来)。 这是做什么的。

  1. 获取当前和未来date的时间间隔(秒和分数秒)
  2. 如果testing的date更长(时间参考),则返回true

干得好

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

这也适用

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

objective-c处理date的方式并不直观。 基本上你可以使用NSTimeInterval从一个时间点获得秒数。 它通常会给出一个很长的数字,例如,我写这个1351026414.640865就是从1970年开始的时间间隔。

时间点>时间点1351026415.640865> 1351026414.640865以上是1秒前,所以是真的。