我如何只比较2 NSDates
的年 - 月 - 日组件?
答案 0 :(得分:11)
所以这就是你如何做到的:
NSCalendar *calendar = [NSCalendar currentCalendar];
NSInteger desiredComponents = (NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit);
NSDate *firstDate = ...; // one date
NSDate *secondDate = ...; // the other date
NSDateComponents *firstComponents = [calendar components:desiredComponents fromDate:firstDate];
NSDateComponents *secondComponents = [calendar components:desiredComponents fromDate:secondDate];
NSDate *truncatedFirst = [calendar dateFromComponents:firstComponents];
NSDate *truncatedSecond = [calendar dateFromComponents:secondComponents];
NSComparisonResult result = [truncatedFirst compare:truncatedSecond];
if (result == NSOrderedAscending) {
//firstDate is before secondDate
} else if (result == NSOrderedDescending) {
//firstDate is after secondDate
} else {
//firstDate is the same day/month/year as secondDate
}
基本上,我们采用两个日期,砍掉他们的小时 - 分钟 - 秒位,然后将它们转回日期。然后,我们比较那些日期(不再有时间组件;只有日期组件),看看它们是如何比较的。
警告:在浏览器中键入但未编译。警告实施者
答案 1 :(得分:4)
查看此主题NSDate get year/month/day
拔出日/月/年后,您可以将它们作为整数进行比较。
如果你不喜欢那种方法
相反,你可以尝试这个..
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy"];
int year = [[dateFormatter stringFromDate:[NSDate date]] intValue];
[dateFormatter setDateFormat:@"MM"];
int month = [[dateFormatter stringFromDate:[NSDate date]] intValue];
[dateFormatter setDateFormat:@"dd"];
int day = [[dateFormatter stringFromDate:[NSDate date]] intValue];
另一种方式......
NSDateComponents *dateComp = [calendar components:unitFlags fromDate:date];
NSInteger year = [dateComp year];
NSInteger month = [dateComp month];
NSInteger day = [dateComp day];
答案 2 :(得分:0)
从iOS 8开始,您可以使用-compareDate:toDate:toUnitGranularity:
的{{1}}方法。
像这样:
NSCalendar
答案 3 :(得分:-1)
使用-[NSDate compare:]
方法 - NSDate Compare Reference