最近做项目遇到要获取当前时间所在一周的时间,通过网上查阅资料解决了,在这里记录一下。
/**
* 获取当前时间所在一周的第一天和最后一天
*/
- (void)getCurrentWeek
{
NSDate *now = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *comp = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitWeekday
fromDate:now];
// 得到星期几
// 1(星期天) 2(星期二) 3(星期三) 4(星期四) 5(星期五) 6(星期六) 7(星期天)
NSInteger weekDay = [comp weekday];
// 得到几号
NSInteger day = [comp day];
NSLog(@"weekDay:%ld day:%ld",weekDay,day);
// 计算当前日期和这周的星期一和星期天差的天数
long firstDiff,lastDiff;
if (weekDay == 1) {
firstDiff = 1;
lastDiff = 0;
}else{
firstDiff = [calendar firstWeekday] - weekDay;
lastDiff = 7 - weekDay;
}
NSArray *currentWeeks = [self getCurrentWeeksWithFirstDiff:firstDiff lastDiff:lastDiff];
NSLog(@"firstDiff:%ld lastDiff:%ld",firstDiff,lastDiff);
// 在当前日期(去掉了时分秒)基础上加上差的天数
NSDateComponents *firstDayComp = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:now];
[firstDayComp setDay:day + firstDiff];
NSDate *firstDayOfWeek= [calendar dateFromComponents:firstDayComp];
NSDateComponents *lastDayComp = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:now];
[lastDayComp setDay:day + lastDiff];
NSDate *lastDayOfWeek= [calendar dateFromComponents:lastDayComp];
NSDateFormatter *formater = [[NSDateFormatter alloc] init];
[formater setDateFormat:@"yyyy-MM-dd"];
NSLog(@"一周开始 %@",[formater stringFromDate:firstDayOfWeek]);
NSLog(@"当前 %@",[formater stringFromDate:now]);
NSLog(@"一周结束 %@",[formater stringFromDate:lastDayOfWeek]);
NSLog(@"%@",currentWeeks);
}
//获取一周时间 数组
- (NSMutableArray *)getCurrentWeeksWithFirstDiff:(NSInteger)first lastDiff:(NSInteger)last{
NSMutableArray *eightArr = [[NSMutableArray alloc] init];
for (NSInteger i = first; i < last + 1; i ++) {
//从现在开始的24小时
NSTimeInterval secondsPerDay = i * 24*60*60;
NSDate *curDate = [NSDate dateWithTimeIntervalSinceNow:secondsPerDay]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"M月d日"];
NSString *dateStr = [dateFormatter stringFromDate:curDate];//几月几号
// NSString *dateStr = @"5月31日";
NSDateFormatter *weekFormatter = [[NSDateFormatter alloc] init];
[weekFormatter setDateFormat:@"EEEE"];//星期几 @"HH:mm 'on' EEEE MMMM d"];
NSString *weekStr = [weekFormatter stringFromDate:curDate];
//组合时间
NSString *strTime = [NSString stringWithFormat:@"%@(%@)",dateStr,weekStr]; [eightArr addObject:strTime];
}
return eightArr;
}
打印结果:
weekDay:5 day:26
firstDiff:-4 lastDiff:2
一周开始 2016-05-22
当前 2016-05-26
一周结束 2016-05-28
[
2016年05日22–星期日,
2016年05日23–星期一,
2016年05日24–星期二,
2016年05日25–星期三,
2016年05日26–星期四,
2016年05日27–星期五,
2016年05日28–星期六
]