gpt4 book ai didi

ios - 如何让 NSArray 包含当前周的每个日期?

转载 作者:行者123 更新时间:2023-11-29 03:24:42 25 4
gpt4 key购买 nike

目前我可以得到一个星期的开始日期和结束日期,但我想得到整个星期的日期并将其放入一个数组中。我使用 + 1 来计算日期但是当有跨月时它会返回错误的结果。

这是我的代码:

-(NSArray *) getWorkWeekDays:(NSDate *)date {
NSCalendar *gregorian = [[NSCalendar alloc]
initWithCalendarIdentifier:NSGregorianCalendar];
NSArray *period = [self getWorkWeekPeriod:date];//This function will return the begin and end date of week based on the "date" parameter. return 2 Object

NSMutableArray *weekDays = [[NSMutableArray alloc] init];
NSInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit |
NSWeekdayCalendarUnit |
NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents *bgnComps = [gregorian components:unitFlags fromDate:period[0]]
int bgnDay = [bgnComps day];
NSString *firstDay = [NSString stringWithFormat:@"%d",bgnDay];

[weekDays addObject:firstDay];
for (int i = 1; i <= 6 ;i++) {
[ bgnComps setDay :([ bgnComps day ] + 1 )];
int nextDay = [bgnComps day];
NSString *day = [NSString stringWithFormat:@"%d",nextDay];
[weekDays addObject:day];
}
return weekDays;}

//在这种情况下,当我将 2013/11/25 作为开始日期时,我将得到 2013/11/25 2013/11/26 2013/11/27 2013/11/28 2013/11/29 2013/11/30 2013/11/31 <--- 这是非常错误的结果.... 有什么建议么?谢谢!!!

最佳答案

此代码使用 NSDate 对象填充一个数组,其中包含本周每天的开始时间

NSDate *now = [NSDate date];

NSCalendar *calendar = [NSCalendar currentCalendar];

NSDate *beginningOfThisWeek;
NSDate *beginningOfNextWeek;

NSTimeInterval durationOfWeek;

[calendar rangeOfUnit:NSWeekCalendarUnit
startDate:&beginningOfThisWeek
interval:&durationOfWeek
forDate:now];

beginningOfNextWeek = [beginningOfThisWeek dateByAddingTimeInterval:durationOfWeek];


NSDate *date = beginningOfThisWeek;
NSMutableArray *dateArray = [@[] mutableCopy];

while (![beginningOfNextWeek compare:date] == NSOrderedSame) {
[dateArray addObject:date];
NSDateComponents *comps = [calendar components:NSUIntegerMax fromDate:date];
comps.day +=1;
date = [calendar dateFromComponents:comps];

}

代码中的问题是由于您使用 NSStrings 来表示日期,尽管您使用 NSDateComponents 但您没有将它们转换为日期对象,而是直接变成一个字符串。

如果你想用字符串表示日期,你应该使用NSDateFormatter


或者,如果您觉得使用 for 循环更舒服:

NSDate *now = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *beginningOfThisWeek;
NSTimeInterval durationOfWeek;

[calendar rangeOfUnit:NSWeekCalendarUnit
startDate:&beginningOfThisWeek
interval:&durationOfWeek
forDate:now];


NSMutableArray *dateArray = [@[] mutableCopy];
NSDateComponents *comps = [calendar components:NSUIntegerMax fromDate:beginningOfThisWeek];

for (NSUInteger i = 0; i < 7; ++i) {
[dateArray addObject:[calendar dateFromComponents:comps]];
++comps.day;
}

关于ios - 如何让 NSArray 包含当前周的每个日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20605772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com