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

Ran*_*jit 31 nsdate ios

我有Date类型的对象..

所以我想比较它们,我在下面的方法中写了一个if条件

if (([startDate1 isEqualToDate:[self getDefaultDate]]) || (startDate1 != [ self getDefaultDate] && m_selectedDate >= m_currentDate1 && cycleStopped))
 {

///execute some condition

}
Run Code Online (Sandbox Code Playgroud)

所以无论我是对还是错......这种做法?

是否以这种方式纠正是正确的

if (dtdate > [m_array objectatIndex:i]
{

}
Run Code Online (Sandbox Code Playgroud)

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

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

问候Ranjit

Luk*_*uke 76

这是使用该NSDate方法的示例,compare:

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

从课程参考:

如果...

接收者和另一个日子完全相同,NSOrderedSame.

接收器的时间晚于anotherDate,NSOrderedDescending.

接收器的时间早于另一个日期,NSOrderedAscending.

例如,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))
Run Code Online (Sandbox Code Playgroud)


Pas*_*cal 19

比较NSDates的简便方法(可在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
Run Code Online (Sandbox Code Playgroud)

并实施:

#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
Run Code Online (Sandbox Code Playgroud)

使用简单:

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

请享用


Jay*_*uis 6

我必须承认,我发现“比较”== 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");
}
Run Code Online (Sandbox Code Playgroud)

任一方法都返回一个 NSDate 对象,该对象早于或晚于另一个。

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