if (datStartDate > datEndDate) {
これは機能していないようです。 isEqual
などがあることは知っていますが、「以上」を実行するにはどうすればよいですか?
両方がNSDate
です。
私が知っている最も簡単な方法は:
if( [firstDate timeIntervalSinceDate:secondDate] > 0 ) {
他の回答は比較をカバーしています:、いくつかのフレーバーを追加したかった;)。
日付を比較するには、-compare:
方法:
次の場合の戻り値:
- レシーバーとanotherDateは互いに完全に等しいNSOrderedSame
- レシーバーは、anotherDateよりも遅れていますNSOrderedDescending
- レシーバーは、anotherDateより前の時間ですNSOrderedAscending。
どうですか...
if ([datStartDate earlierDate: datEndDate] == datStartDate) {
// datStartDate is earlier
} else {
// datEndDate is earlier
}
あなたが持っているように NSDates :
NSDate *datStartDate = [NSDate dateWithString:@"2010-10-01 03:00:00 +0900"];
NSDate *datEndDate = [NSDate dateWithString:@"2010-10-01 04:00:00 +0900"];
if ( ([datStartDate compare:datEndDate]) == NSOrderedDescending ) {
...
}
受け入れられた回答のSwift 2バージョン:
if firstDate.timeIntervalSinceDate(secondDate) > 0 {
// firstDate is greater (further in the future) than secondDate
}
if ([startDate compare:endDate] == NSOrderedAscending) {
NSLog(@"startDate is EARLIER than endDate");
}
私は何年もNSDateとNSComparisonの結果を処理してきましたが、これがどのように機能するかを一生覚えることはできません。それで、私はDate
に便利な拡張機能を書きました:
func isBefore(_ otherDate: Date) -> Bool {
let result = self.compare(otherDate)
switch result {
case .orderedAscending:
return true
case .orderedSame,
.orderedDescending:
return false
}
}
isAfter
拡張機能が必要な場合は、true
に対してorderedDescending
を返す必要があります。