查找下周一的 NSDate [关闭]

Posted

技术标签:

【中文标题】查找下周一的 NSDate [关闭]【英文标题】:Find the NSDate for next Monday [closed] 【发布时间】:2013-08-11 11:25:50 【问题描述】:

我想获取当前日期之后的下周一的日期。

所以如果今天的日期是 2013 年 8 月 9 日(星期五),那么我想得到 2013 年 8 月 12 日的日期。

我该怎么做?

【问题讨论】:

虽然这是一个简单的问题并且需要很少的努力,但日期在任何语言中都很烦人,所以我不明白为什么你应该被否决。 【参考方案1】:

这段代码应该得到你想要的。它只是计算从星期一开始的天数,然后从当前日期追加。

NSDate *now = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSWeekCalendarUnit | NSWeekdayCalendarUnit fromDate:now];

NSUInteger weekdayToday = [components weekday];  
NSInteger daysToMonday = (9 - weekdayToday) % 7;

NSDate *nextMonday = [now dateByAddingTimeInterval:60*60*24*daysToMonday];

未经测试,但应该可以工作,并且无需担心更改日历的第一个日期。

而且它甚至可以轻松地添加到一周中的每隔一天,只需将9inside (9 - weekdayToday) % 7; 更改为7 + weekDayYouWant,记住那个星期天= 1,星期一 = 2...

【讨论】:

感谢卢卡斯,完美运行。只是一件事,如果今天是星期一,那么我想在下星期一而不是这个星期一显示。你能告诉我我怎样才能做到这一点吗?再次感谢 我不认为有一种优雅的方式可以在一天内改变这种行为。但是您可以添加(而不是替换)类似的东西,之前 nextMonday 代码:daysToMonday = (daysToMonday == 0) ? 7 : daysToMonday;。这样,当今天是星期一时,您将添加 7 天而不是 0 天。如果您为这种情况找到更好的解决方案,请告诉我 感谢您的快速回复,您的解决方案完美运行 :) 谢谢 不适用于夏令时。有关添加天数的修改解决方案,请参阅此***.com/questions/5067785/… 从 macOS 10.9 / ios 8 开始,推荐的方式是nextDayAfterDate:matchingComponents:options: of NSCalendar。可以考虑世界各地的夏令时变化,比86400可靠得多。【参考方案2】:

您可以使用NSCalendar 方法dateFromComponents: 传递正确启动的NSDateComponents 对象

NSDateComponents *components = [[NSCalendar currentCalendar] components: NSYearCalendarUnit | NSWeekOfYearCalendarUnit fromDate:[NSDate date]];

NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setWeekOfYear:[components weekOfYear] + 1];
[comps setWeekday:1];
[comps setYear:[components year]];
NSCalendar *calendar = [NSCalendar currentCalendar];
[calendar setFirstWeekday:2]; //This needs to be checked, which day is monday?
NSDate *date = [calendar dateFromComponents:comps];

类似的东西可以工作(盲打)

【讨论】:

假设星期从星期日开始(工作日 = 0),那么在星期天运行时,这段代码不会得到下周的星期一,而不是只得到下一天吗? 工作日单位是从 1 到 n 的数字,其中 n 是一周中的天数。例如,在公历中,n 为 7,星期日由 1 表示。所以是的,可能代码需要更改 我稍微编辑了代码以考虑到这一点。当然,还应该检查当前日期是否是一年中的最后一周,依此类推.. @Vik 它不起作用,但我喜欢这种方法。

以上是关于查找下周一的 NSDate [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用 NSDate 根据一周中的一般日期计算时间

周一至周日的月历显示日期[关闭]

如何使用当前时间计算某个位置的打开和关闭时间

关闭时间必须大于打开时间

AppWillTerminate调用的函数崩溃[关闭]

在 iOS 中将用户出生日期格式化为 NSDate 对象