【发布时间】:2017-02-15 13:40:15
【问题描述】:
我想检查 NSDate 是否与今天在同一周。因此,我认为 weekOfYears 来自 NSDateComponents,就像 post 中提到的那样。
- (BOOL)dateIsThisWeek:(NSDate *)date
{
NSCalendar *cal = [NSCalendar currentCalendar];
[cal setFirstWeekday: 2]; // Added in second try
NSDate *today = [NSDate date];
NSDateComponents *todaysComponents = [cal components:NSCalendarUnitWeekOfYear fromDate: today];
NSUInteger todaysWeek = [todaysComponents weekOfYear];
NSDateComponents *otherComponents = [cal components:NSCalendarUnitWeekOfYear fromDate: date];
NSUInteger anotherWeek = [otherComponents weekOfYear];
return todaysWeek == anotherWeek; // todaysWeek=7 | anotherWeek=8
}
在我的示例中,我有以下日期:
today: 2017-02-15 12:00:00 +0000
date: 2017-02-18 12:00:00 +0000
问题是,todaysWeek 设置为 7,anotherWeek 设置为 8,我无法想象为什么。
我认为问题可能是,这周从星期日开始,所以我将日历的第一个工作日设置为 2(星期一),但不幸的是没有成功。
更新
我也试过这段代码,但不幸的是得到了同样的结果:
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDateComponents *todaysComponents = [gregorian components:NSCalendarUnitWeekOfYear fromDate:[NSDate date]];
NSUInteger todaysWeek = [todaysComponents weekOfYear];
NSDateComponents *otherComponents = [gregorian components:NSCalendarUnitWeekOfYear fromDate: date];
NSUInteger datesWeek = [otherComponents weekOfYear];
return todaysWeek==datesWeek; // todaysWeek=7 | datesWeek=8
两个日期都应该在第 7 周,就像多个 websites 所描述的那样。
【问题讨论】:
-
如何定义“一周”?是否是当前的“指定周”——即从上周日开始?从上周一开始?一周是连续7天吗?那么,如果 1 月 1 日是星期四,那么 1 月 6 日星期二仍然是第一个“周”?
-
@DonMag 在我看来一周是从周一到周日,就像在这个例子中一样:week-number.net/calendar-with-week-numbers-2017.html
-
@Sneak 不幸的是,您的建议并没有解决我的问题。使用帖子中标记为已解决的代码,返回相同的星期数,7 和 8。
-
@user3191334 我不知道是什么问题,今天的本周是7,下周是8,你可以看到epochconverter.com/weeknumbers你也应该检查这个问题也许对你有帮助path ,但我不明白阅读您的问题到底是什么问题:stackoverflow.com/questions/16875420/…
标签: ios objective-c nscalendar