如何检查NSDate
是否属于今天?
我过去常常使用[aDate description]
中的前10个字符来检查它。[[aDate description] substringToIndex:10]
返回类似于"YYYY-MM-DD"
的字符串,所以我将该字符串与[[[NSDate date] description] substringToIndex:10]
返回的字符串进行了比较。
有没有更快速和/或更整洁的检查方法?
谢谢。
发布于 2014-03-24 11:34:21
在macOS 10.9+ & iOS 8+中,NSCalendar/Calendar上有一个方法可以做到这一点!
- (BOOL)isDateInToday:(NSDate *)date
所以你可以简单的做
Objective-C:
BOOL today = [[NSCalendar currentCalendar] isDateInToday:date];
Swift 3:
let today = Calendar.current.isDateInToday(date)
发布于 2010-02-25 10:23:39
您可以比较日期组件:
NSDateComponents *otherDay = [[NSCalendar currentCalendar] components:NSCalendarUnitEra | NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:aDate];
NSDateComponents *today = [[NSCalendar currentCalendar] components:NSCalendarUnitEra | NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:[NSDate date]];
if([today day] == [otherDay day] &&
[today month] == [otherDay month] &&
[today year] == [otherDay year] &&
[today era] == [otherDay era]) {
//do stuff
}
编辑:
我更喜欢stefan的方法,我认为它使得if语句更清晰、更容易理解:
NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *components = [cal components:(NSCalendarUnitEra | NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:[NSDate date]];
NSDate *today = [cal dateFromComponents:components];
components = [cal components:(NSCalendarUnitEra | NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:aDate];
NSDate *otherDate = [cal dateFromComponents:components];
if([today isEqualToDate:otherDate]) {
//do stuff
}
克里斯,我已经采纳了你的建议。我必须查一查什么时代是什么,所以对于其他不知道的人来说,它区分了公元前和公元。对于大多数人来说,这可能是不必要的,但它很容易检查,并增加了一些确定性,所以我将其包括在内。如果你追求速度,这可能不是一个好方法。
注意到上有很多关于SO的答案,7年后这已经完全过时了。在Swift中,现在只需使用.isDateInToday
发布于 2011-01-29 13:09:45
这是您的问题的一个分支,但是如果您想打印带有“今天”或“昨天”的NSDate,请使用函数
- (void)setDoesRelativeDateFormatting:(BOOL)b
对于NSDateFormatter
https://stackoverflow.com/questions/2331129
复制相似问题