首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何确定NSDate是否是今天的?

如何确定NSDate是否是今天的?
EN

Stack Overflow用户
提问于 2010-02-25 10:16:52
回答 20查看 72.1K关注 0票数 158

如何检查NSDate是否属于今天?

我过去常常使用[aDate description]中的前10个字符来检查它。[[aDate description] substringToIndex:10]返回类似于"YYYY-MM-DD"的字符串,所以我将该字符串与[[[NSDate date] description] substringToIndex:10]返回的字符串进行了比较。

有没有更快速和/或更整洁的检查方法?

谢谢。

EN

回答 20

Stack Overflow用户

回答已采纳

发布于 2014-03-24 11:34:21

在macOS 10.9+ & iOS 8+中,NSCalendar/Calendar上有一个方法可以做到这一点!

代码语言:javascript
运行
复制
- (BOOL)isDateInToday:(NSDate *)date 

所以你可以简单的做

Objective-C:

代码语言:javascript
运行
复制
BOOL today = [[NSCalendar currentCalendar] isDateInToday:date];

Swift 3:

代码语言:javascript
运行
复制
let today = Calendar.current.isDateInToday(date)
票数 315
EN

Stack Overflow用户

发布于 2010-02-25 10:23:39

您可以比较日期组件:

代码语言:javascript
运行
复制
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语句更清晰、更容易理解:

代码语言:javascript
运行
复制
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

票数 192
EN

Stack Overflow用户

发布于 2011-01-29 13:09:45

这是您的问题的一个分支,但是如果您想打印带有“今天”或“昨天”的NSDate,请使用函数

代码语言:javascript
运行
复制
- (void)setDoesRelativeDateFormatting:(BOOL)b

对于NSDateFormatter

票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2331129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档