2013-04-14 52 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。上述代码似乎占上风。你的回复虽然是因为你确实提到了它不起作用的原因,但有些帮助。所以,我标记你的答案是有用的。 –

相关问题