Ios 使用年中的周检查NSDate是否在当前周

Ios 使用年中的周检查NSDate是否在当前周,ios,objective-c,nscalendar,Ios,Objective C,Nscalendar,我想检查NSDate是否与今天在同一周内。因此,我从 NSDATC组件< /代码>中考虑 s。 在我的示例中,我有以下日期: today: 2017-02-15 12:00:00 +0000 date: 2017-02-18 12:00:00 +0000 问题是,todaysWeek设置为7,而另一周设置为8,我无法想象为什么 我想问题可能是,这一周从星期天开始,所以我将日历的第一个工作日设置为2(星期一),但不幸的是没有成功 更新 我也尝试过这段代码,但不幸的是结果相同: NSCale

我想检查NSDate是否与今天在同一周内。因此,我从<代码> NSDATC组件< /代码>中考虑<<代码>周岁< /代码> s。 在我的示例中,我有以下日期:

today:  2017-02-15 12:00:00 +0000
date:   2017-02-18 12:00:00 +0000
问题是,
todaysWeek
设置为7,而
另一周设置为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周,就像多个日期所描述的那样。

试试这个吧?(复制自我自己的项目代码)

打印输出:

2017-02-17 03:51:58.231797 Sneak[5518:2676264] todays week 7
2017-02-17 03:51:58.231836 Sneak[5518:2676264] anotherWeek 7
编辑:(如下评论部分所述)


根据国际标准ISO 8601,周一是一周的第一天,但在美国、加拿大和日本,周一被视为一周的第二天。在现代的公历中,星期一在星期天之后,星期二之前timeanddate.com/calendar/days/monday.html希望“be_NL”永远不要切换–DonMag

这是对Sleek代码的一个非常细微的修改。。。称之为:

//
// startDayOfWeek: Sunday == 1, Monday == 2, Tues == 3, etc

Bool b = [self dateIsThisWeek:date startDayOfWeek:2];


- (BOOL)dateIsThisWeek:(NSDate *)dateToTest startDayOfWeek:(NSInteger)iStart {

    NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

    // this is the key - 1 == week runs Sunday-Saturday, 2 == Monday-Sunday, 3 == Tues-Mon, etc
    [gregorianCalendar setFirstWeekday:iStart];

    NSDate *today = [NSDate date];

    NSDateComponents *todaysComponents = [gregorianCalendar components:NSCalendarUnitWeekOfYear|NSCalendarUnitWeekday fromDate: today];
    NSInteger todaysWeek = [todaysComponents weekOfYear];

    NSDateComponents *testComponents = [gregorianCalendar components:NSCalendarUnitWeekOfYear|NSCalendarUnitWeekday fromDate: dateToTest];
    NSInteger testsWeek = [testComponents weekOfYear];

    return todaysWeek == testsWeek;
}

你如何定义“一周”?这是当前的“命名周”吗?也就是说,从上周日开始?从上周一开始?一周是连续7天吗?所以,如果1月1日是星期四,那么1月6日星期二仍然是第一个“星期”?在我看来,@DonMag的可能重复的一周是从周一到周日,就像下面的例子:@sleek不幸的是,你的建议没有解决我的问题。使用帖子中标记为已解决的代码,返回相同的周数,7和8。@user3191334我不确定问题出在哪里,当前周今天是7,下周是8,您可以看到您也应该检查此问题,也许可以帮助您找到正确的路径,但是我不明白问题到底是什么,读你的问题:谢谢,对不起。我刚刚复制了你的代码,现在可以用了。我无法想象为什么我总是得到第8周的训练。编辑:第一个解决方案已经足够了,但第二个也很有效。谢谢:)你们确定这是你们想要的吗?如果我理解正确,@user3191334希望2月19日星期日与今天2月15日星期三在同一周。使用上面的代码,您将比较日期设置为18号星期六,您将得到第7周和第7周。。。如果您使用
[comps setDay:19]
运行它,您将获得第7周和第8周。还是?@user3191334你认为我会让你失望吗?检查我的最新答案:)@sleek Ahhh设置区域设置正在发挥作用!非常感谢你!根据国际标准ISO 8601,周一是一周的第一天,但在美国、加拿大和日本,周一被视为一周的第二天。在现代的公历中,星期一在星期天之后,星期二之前希望“be_NL”永远不会切换:)
2017-02-17 03:51:58.231797 Sneak[5518:2676264] todays week 7
2017-02-17 03:51:58.231836 Sneak[5518:2676264] anotherWeek 7
//
// startDayOfWeek: Sunday == 1, Monday == 2, Tues == 3, etc

Bool b = [self dateIsThisWeek:date startDayOfWeek:2];


- (BOOL)dateIsThisWeek:(NSDate *)dateToTest startDayOfWeek:(NSInteger)iStart {

    NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

    // this is the key - 1 == week runs Sunday-Saturday, 2 == Monday-Sunday, 3 == Tues-Mon, etc
    [gregorianCalendar setFirstWeekday:iStart];

    NSDate *today = [NSDate date];

    NSDateComponents *todaysComponents = [gregorianCalendar components:NSCalendarUnitWeekOfYear|NSCalendarUnitWeekday fromDate: today];
    NSInteger todaysWeek = [todaysComponents weekOfYear];

    NSDateComponents *testComponents = [gregorianCalendar components:NSCalendarUnitWeekOfYear|NSCalendarUnitWeekday fromDate: dateToTest];
    NSInteger testsWeek = [testComponents weekOfYear];

    return todaysWeek == testsWeek;
}