计算一周的日期段

前段时间公司要求做内部签到排行榜,其中涉及到每周的签到情况,在选择上一周,下一周时就需要知道周一和周日的日期。找到了一段代码,自己做了一下,现在记录一下,希望给大家带来帮助。

/**

 * 计算一周的日期段

 */

- (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];

   

}

 如果对你有一点点小启发的话,请帮忙点赞,谢谢🙏🙏🙏

posted on 2017-11-02 09:41  索忆mcc  阅读(504)  评论(0)    收藏  举报

导航