美文网首页
iOS 判断两个时间是否是在同一周

iOS 判断两个时间是否是在同一周

作者: CarrySniper | 来源:发表于2019-04-26 14:33 被阅读0次

成立条件

  • 情况1:年份Year相等,且这一周所在年的周次WeekOfYear相等
  • 情况2:年份Year不相等,但是也可能属于同一周。需要yearForWeekOfYear和weekOfYear相等即可(条件包含情况1)
推荐方案
 #pragma mark 判断是否是同一周
- (BOOL)isSameWeek:(NSDate *)date1 date2:(NSDate *)date2 {
    // 日历对象
    NSCalendar *calendar = [NSCalendar currentCalendar];
    // 一周开始默认为星期天=1。 
    calendar.firstWeekday = 1;
    
    unsigned unitFlag = NSCalendarUnitWeekOfYear | NSCalendarUnitYearForWeekOfYear;
    NSDateComponents *comp1 = [calendar components:unitFlag fromDate:date1];
    NSDateComponents *comp2 = [calendar components:unitFlag fromDate:date2];
    /// 年份和周数相同,即判断为同一周
    /// NSCalendarUnitYearForWeekOfYear已经帮转换不同年份的周所属了,比如2019.12.31是等于2020的。这里不使用year,使用用yearForWeekOfYear
    return (([comp1 yearForWeekOfYear] == [comp2 yearForWeekOfYear]) && ([comp1 weekOfYear] == [comp2 weekOfYear]));
}

注意:[calendar components: fromDate: toDate: options:];这样是不行的,这是比较时间差,时间差为7天内的就为0了。

有评论提醒:不同年份判断是有问题的。所以下面方案不能使用,后期会删除掉
  • (BOOL)isSameWeek:(NSDate *)date1 date2:(NSDate *)date2 {
    // 日历对象
    NSCalendar *calendar = [NSCalendar currentCalendar];
    // 一周开始默认为星期天=1。
    calendar.firstWeekday = 1;

    unsigned unitFlag = NSCalendarUnitYear | NSCalendarUnitWeekOfYear;
    NSDateComponents *comp1 = [calendar components:unitFlag fromDate:date1];
    NSDateComponents *comp2 = [calendar components:unitFlag fromDate:date2];
    return (([comp1 year] == [comp2 year]) && ([comp1 weekOfYear] == [comp2 weekOfYear]));
    }

说明如图:

image.png
日期2019年12月31日的参数为:
NSDateComponents: {
   Calendar Year: 2019          // 说明:年份为2019年
   Year for Week of Year: 2020  // 说明:周数年份为2020年,而不是2019年
   Week of Year: 1              // 说明:这天所在周次为今年的第1周
}
日期2020年01月01日的参数为:
NSDateComponents:  {
   Calendar Year: 2020          // 说明:年份为2020年
   Year for Week of Year: 2020  // 说明:周数年份为2020年
   Week of Year: 1              // 说明:这天所在周次为今年的第1周
}
firstWeekday:1.周日 2.周一 3.周二 4.周三 5.周四 6.周五  7.周六
当calendar.firstWeekday = 1;,起始为星期天,则2019年12月29日~2020年01月04日为同一周。
当calendar.firstWeekday = 2;,起始为星期一,则2019年12月30日~2020年01月05日为同一周。

相关文章

网友评论

      本文标题:iOS 判断两个时间是否是在同一周

      本文链接:https://www.haomeiwen.com/subject/oibfnqtx.html