计算一周的日期段
前段时间公司要求做内部签到排行榜,其中涉及到每周的签到情况,在选择上一周,下一周时就需要知道周一和周日的日期。找到了一段代码,自己做了一下,现在记录一下,希望给大家带来帮助。
/**
* 计算一周的日期段
*/
- (void)weekDate:(NSString *)dateStr
{
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"yyyy-MM-dd"];
NSDate *resDate = [formatter dateFromString:dateStr];
// NSLog(@"%@",resDate);
// NSDate *now = [NSDate date];
NSCalendar *calendar1 = [NSCalendar currentCalendar];
NSDateComponents *comp = [calendar1 components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit|NSWeekdayCalendarUnit|NSDayCalendarUnit
fromDate:resDate];
// 得到星期几
// 1(星期天) 2(星期二) 3(星期三) 4(星期四) 5(星期五) 6(星期六) 7(星期天)
NSInteger weekDay = [comp weekday];
// 得到几号
NSInteger day = [comp day];
// 计算当前日期和这周的星期一和星期天差的天数
long firstDiff,lastDiff;
if (weekDay == 1) {
firstDiff = -6;
lastDiff = 0;
}else{
firstDiff = [calendar1 firstWeekday] - weekDay + 1;
lastDiff = 8 - weekDay;
}
// 在当前日期(去掉了时分秒)基础上加上差的天数
NSDateComponents *firstDayComp = [calendar1 components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:resDate];
[firstDayComp setDay:day + firstDiff];
NSDate *firstDayOfWeek = [calendar1 dateFromComponents:firstDayComp];
NSDateComponents *lastDayComp = [calendar1 components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:resDate];
[lastDayComp setDay:day + lastDiff];
NSDate *lastDayOfWeek = [calendar1 dateFromComponents:lastDayComp];
NSDateFormatter *formatter1 = [[NSDateFormatter alloc] init];
[formatter1 setDateFormat:@"yyyy-MM-dd"];
self.weekFirst = [formatter1 stringFromDate:firstDayOfWeek];
self.weekLast = [formatter1 stringFromDate:lastDayOfWeek];
// NSLog(@"%@=======%@",self.weekFirst,self.weekLast);
}
这里可以根据传进去的天数,计算这一周的周一及周末的日期。
对于上一周的周一及周末日期,我的做法是计算周一前一天的日期,在计算周一及周末日期。同理,下一周就是先计算周末的下一天,在计算周一及周末日期。
下面是我写的计算上一天及下一天日期的代码。
/**
* 计算前一天的日期
*/
-(void)getLastDate:(NSString *)dateStr
{
NSString *str = [dateStr substringToIndex:4];//year
NSString *str2 = [[dateStr substringToIndex:7] substringFromIndex:5];
NSString *str3 = [[dateStr substringFromIndex:8] substringToIndex:2];
NSArray *datearr = [[NSArray alloc] initWithObjects:@"01",@"03",@"05",@"07",@"08",@"10",@"12", nil];
if ([str3 isEqualToString:@"01"])
{
if ([datearr containsObject:str2])
{
for (int i = 0; i < datearr.count ; i ++)
{
if ([str2 isEqualToString:datearr[0]])
{
str =[NSString stringWithFormat:@"%d",[str intValue] -1];
str2 = @"12";
str3 = @"31";
break;
}
else if ([str2 isEqualToString:datearr[1]])
{
int a = [str intValue];
if((a%4==0&&a%100!=0)||a%400==0)
{
str2 = @"02";
str3 = @"29";
break;
}
else
{
str2 = @"02";
str3 = @"28";
break;
}
}
else if ([str2 isEqualToString:datearr[4]])
{
str2 = [NSString stringWithFormat:@"%d",[str2 intValue] - 1];
str3 = @"31";
break;
}
else
{
str2 = [NSString stringWithFormat:@"%d",[str2 intValue] - 1];
str3 = @"30";
break;
}
}
}
else
{
str2 = [NSString stringWithFormat:@"%d",[str2 intValue] - 1];
str3 = @"31";
}
}
else
{
str3 = [NSString stringWithFormat:@"%d",[str3 intValue]- 1];
}
if (str2.length == 1)
{
str2 = [NSString stringWithFormat:@"0%@",str2];
}
if (str3.length == 1)
{
str3 = [NSString stringWithFormat:@"0%@",str3];
}
self.dateLast = [NSString stringWithFormat:@"%@-%@-%@",str,str2,str3];
}
/**
* 计算下一天的日期
*/
-(void)getNextDate:(NSString *)dateStr
{
NSString *str = [dateStr substringToIndex:4];//year
NSString *str2 = [[dateStr substringToIndex:7] substringFromIndex:5];
NSString *str3 = [[dateStr substringFromIndex:8] substringToIndex:2];
NSArray *datearr = [[NSArray alloc] initWithObjects:@"01",@"03",@"05",@"07",@"08",@"10",@"12", nil];
if ([datearr containsObject:str2])
{
if ([str3 isEqualToString:@"31"])
{
if ([str2 isEqualToString:datearr[6]])
{
str = [NSString stringWithFormat:@"%d",[str intValue] + 1];
str2 = @"01";
str3 = @"01";
}
else
{
str2 = [NSString stringWithFormat:@"%d",[str2 intValue] + 1];
str3 = @"01";
}
}
else
{
str3 = [NSString stringWithFormat:@"%d",[str3 intValue] + 1];
}
}
else if ([str2 isEqualToString:@"02"])
{
int a = [str intValue];
if((a%4==0&&a%100!=0)||a%400==0)
{
if ([str3 isEqualToString:@"29"])
{
str2 = [NSString stringWithFormat:@"%d",[str2 intValue] + 1];
str3 = @"01";
}
else
{
str3 = [NSString stringWithFormat:@"%d",[str3 intValue] + 1];
}
}
else
{
if ([str3 isEqualToString:@"28"])
{
str2 = [NSString stringWithFormat:@"%d",[str2 intValue] + 1];
str3 = @"01";
}
else
{
str3 = [NSString stringWithFormat:@"%d",[str3 intValue] + 1];
}
}
}
else
{
if ([str3 isEqualToString:@"30"])
{
str2 = [NSString stringWithFormat:@"%d",[str2 intValue] + 1];
str3 = @"01";
}
else
{
str3 = [NSString stringWithFormat:@"%d",[str3 intValue] + 1];
}
}
if (str2.length == 1)
{
str2 = [NSString stringWithFormat:@"0%@",str2];
}
if (str3.length == 1)
{
str3 = [NSString stringWithFormat:@"0%@",str3];
}
self.dateNext = [NSString stringWithFormat:@"%@-%@-%@",str,str2,str3];
}
如果对你有一点点小启发的话,请帮忙点赞,谢谢🙏🙏🙏
浙公网安备 33010602011771号