2013-04-14 126 views
0

找出日期是否在某個日期範圍內的最佳方法是什麼?我現在這樣做的權利:檢查日期是否在日期範圍內

if (([rangeStart compare:userEnteredDate] == NSOrderedAscending) && ([rangeEnd compare:userEnteredDate] == NSOrderedDescending) 

與上面的代碼唯一的問題是,如果rangeStart日期和userEnteredDate是相同的,if語句會產生某種原因不明給我「假」。任何人有任何想法爲什麼?

有沒有更好的方法來檢查userEnteredDate是否落入rangeStart和rangeEnd?

回答

0

不知道是否有一個更直接的方式,但是這一次應該work.-

if (([rangeStart compare:userEnteredDate] == NSOrderedAscending || 
    [rangeStart compare:userEnteredDate] == NSOrderedSame) && 
    ([rangeEnd compare:userEnteredDate] == NSOrderedDescending || 
     [rangeEnd compare:userEnteredDate] == NSOrderedSame)) 
+0

如果考慮檢查比較結果是否等於'NSOrderedAscending'或'NSOrderedSame'就好比檢查它不是'NSOrderedDescending',那麼你可以簡化它。相同的概念適用於其他比較。下面我的答案給出了一個更直接的方法。 –

+0

你是對的。但是不應該比較'[rangeStart compare:userEnteredDate]'和'[rangeStart compare:userEnteredDate]'? – ssantos

+0

請注意,我倒轉升序和降落wrt到您的;) –

2

的原因是,如果rangeStart等於userEnteredDate,您的布爾表達式的第一個塊將評估爲

NSOrderedSame == NSOrderedAscending 

這確實是假的。

我會重新排列順序,並使用類似

if (([userEnteredDate compare:rangeStart] != NSOrderedDescending) 
    && ([userEnteredDate compare:rangeEnd] != NSOrderedAscending)) { 
    //... 
} 
+0

我想這一點,但它仍然不起作用。感謝您的回覆。 –

+0

「沒有工作」沒有多大幫助。這個問題是什麼? –

+0

問題是,如果userEnteredDate與rangeStart相同,則if語句爲false。上述代碼似乎佔上風。你的回覆雖然是因爲你確實提到了它不起作用的原因,但有些幫助。所以,我標記你的答案是有用的。 –

相關問題