下面是我在工作中使用的计算某个日期与当前日期比较是否在同一周内,我现在感觉有点麻烦,不知道还有没有简单的方法,如果有欢迎给我留言,马上改正。
- (BOOL) isSameWeekWithDate:(NSDate *)date {
NSCalendar *calendar = [NSCalendar currentCalendar];
int unit = NSCalendarUnitWeekday | NSCalendarUnitMonth | NSCalendarUnitYear | kCFCalendarUnitDay | kCFCalendarUnitHour | kCFCalendarUnitMinute ;
//1.获得当前时间的 年月日
NSDateComponents *nowCmps = [calendar components:unit fromDate:[NSDate date]];
NSDateComponents *sourceCmps = [calendar components:unit fromDate:date];
// 对比时间差
NSDateComponents *dateCom = [calendar components:unit fromDate:[NSDate date] toDate:date options:0];
NSInteger subDay = labs(dateCom.day);
NSInteger subMonth = labs(dateCom.month);
NSInteger subYear = labs(dateCom.year);
if (subYear == 0 && subMonth == 0) { //当相关的差值等于零的时候说明在一个年、月、日的时间范围内,不是按照零点到零点的时间算的
if (subDay > 6) { //相差天数大于6肯定不在一周内
return NO;
} else { //相差的天数大于或等于后面的时间所对应的weekday则不在一周内
if (dateCom.day >= 0 && dateCom.hour >=0 && dateCom.minute >= 0) { //比较的时间大于当前时间
//西方一周的开始是从周日开始算的,周日是1,周一是2,而我们是从周一开始算新的一周
NSInteger chinaWeekday = sourceCmps.weekday == 1 ? 7 : sourceCmps.weekday - 1;
if (subDay >= chinaWeekday) {
return NO;
} else {
return YES;
}
} else {
NSInteger chinaWeekday = sourceCmps.weekday == 1 ? 7 : nowCmps.weekday - 1;
if (subDay >= chinaWeekday) { //比较的时间比当前时间小,已经过去的时间
return NO;
} else {
return YES;
}
}
}
} else { //时间范围差值超过了一年或一个月的时间范围肯定就不在一个周内了
return NO;
}
}
在网上看到有人只是比较了一下year、month、day,说是在同一周内了,我测了一下并不能返回正确的结果,代码如下:
return (selfCmps.year == nowCmps.year) && (selfCmps.month == nowCmps.month) && (selfCmps.day == nowCmps.day);
}
网友评论