所以我试着得到这周的日期范围。
当我得到当前日期组件(只有年份和日期)时,这些是值:
我注意到在一周前写了“过时的”。确实尝试搜索苹果文档,但没有发现任何相关信息。
然后我尝试使用当前日历(或公历,相同的值)获取 NSDate,但我得到的值是:
所以周被忽略了。所以我在我的组件中增加了几个月零一周的时间,并且有这样的组件:
然后我试图摆脱我的约会,这就是我得到的:
现在显然周组件在这里被忽略了。为什么呢?是否已弃用?或者它是一些错误?
所以我终于找到了解决方案。
如果您只是设置工作日,似乎一切都解决了(开始工作):
[startDate setWeekday:1];
然后正确返回带有星期的日期。
不知道在没有设置工作日的情况下忽略周组件是否仍然是一个错误。
要计算一周的开始结束日期, 的rangeOfUnit:startDate:interval:forDate:
方法NSCalendar
非常有用:
NSDate *now = [NSDate date];
NSDate *startOfWeek;
NSTimeInterval length;
[[NSCalendar currentCalendar] rangeOfUnit:NSWeekCalendarUnit
startDate:&startOfWeek
interval:&length
forDate:now];
NSDate *endOfWeek = [startOfWeek dateByAddingTimeInterval:length];
NSLog(@"%@", startOfWeek);
NSLog(@"%@", endOfWeek);
要计算一周前的同一日期,请使用dateByAddingComponents
:
NSDate *now = [NSDate date];
NSDateComponents *comp = [[NSDateComponents alloc] init];
[comp setWeek:-1]; // One week back in time
NSDate *date = [[NSCalendar currentCalendar] dateByAddingComponents:comp toDate:now options:0];
NSLog(@"%@", now);
NSLog(@"%@", date);
即使我对我的问题没有答案,我也会发布我使用的这个问题的解决方案。
所以我花了几周时间将它们乘以 7。这给了我当前的周末结束日期。我知道这不好,因为几周可以设置不同的日期等。但是对于我最默认的问题(公历日历,每周 7 天),这个解决方案是现有日期时间计算器中的快速解决方法。
[components setDay:components.week * 7 - 7]; //Start of week
startDate = [[NSCalendar currentCalendar] dateFromComponents:components];
[components setDay:components.day + 7]; //End of week
endDate = [[NSCalendar currentCalendar] dateFromComponents:components];
[components setDay:0]; //I am using this not just here so i am setting back my changes