每周星期几,每月几号的日期处理

根据某个日期和所选择的是周几(或者几号),返回大于这个日期,最近的一个时间。
比如:
1.某周的某一星期
currentDate:2016-4-22 10:00 (星期五)
tweekDay:0(星期日)
返回的结果:2016-4-24 10:00 (星期日)

//每周的某一天 星期日为0,tWeekDay取值范围0-6(星期日-星期六)
-(NSDate*)dealWithDate:(NSInteger)tWeekDay currentDate:(NSDate *)aCurrentDate{

#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_8_0
    NSInteger unitFlagsYearMonthDay = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;
    NSInteger unitFlagsHourMinuteSecond =NSCalendarUnitHour | NSCalendarUnitMinute |NSCalendarUnitSecond ;
    NSInteger unitFlagsWeekday = NSCalendarUnitWeekday;
    NSInteger unitFlagsWeekOfMonth  = NSCalendarUnitWeekOfMonth;

#else
    NSInteger unitFlagsYearMonthDay = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
    NSInteger unitFlagsHourMinuteSecond =NSHourCalendarUnit | NSMinuteCalendarUnit |NSSecondCalendarUnit ;
    NSInteger unitFlagsWeekday = NSWeekdayCalendarUnit;
    NSInteger unitFlagsWeekOfMonth  = NSWeekCalendarUnit;

#endif
    NSDate *dateOut      = nil;
    NSTimeInterval count = 0;
    NSCalendar *calendar = [NSCalendar currentCalendar];
    //获取当前周的开始日期
    BOOL b = [calendar rangeOfUnit:unitFlagsWeekOfMonth startDate:&dateOut interval:&count forDate:aCurrentDate];
    if(b)
    {
        //得到当前周的开始日期的年月日
        NSDateComponents *comptGetDayMonthYear = [calendar components:unitFlagsYearMonthDay fromDate:dateOut];
         //得到currentDate的星期
        NSDateComponents *comptGetWeekDay = [calendar components:unitFlagsWeekday fromDate:aCurrentDate];
        //得到currentDate的时间
        NSDateComponents *comptGetHourMinuteSecond = [calendar components:unitFlagsHourMinuteSecond fromDate:aCurrentDate];
        //设置当前周的开始日期的时间为currentDate的时间
        [comptGetDayMonthYear setHour:comptGetHourMinuteSecond.hour];
        [comptGetDayMonthYear setMinute:comptGetHourMinuteSecond.minute];
        [comptGetDayMonthYear setSecond:comptGetHourMinuteSecond.second];

        NSDate *tWeekDayDate = [calendar dateFromComponents:comptGetDayMonthYear];
        NSTimeInterval tTimeInterval = 0;
        //小于今天的星期时
        if (tWeekDay < (comptGetWeekDay.weekday - 1)) {
            tTimeInterval = (tWeekDay+7) *60*60*24;
        }else{
            tTimeInterval = (tWeekDay) *60*60*24;
        }
        NSDate *tFinalDate = [tWeekDayDate dateByAddingTimeInterval:tTimeInterval];
        return tFinalDate;
    }
    return aCurrentDate;
}

2.某月的某一天
currentDate:2016-4-22 10:00
aMonthDay:1(某月的1号)
返回的结果:2016-5-1 10:00

//某月的某一天,aMonthDay取值范围0-31(1号-31号)
-(NSDate*)dealWithMonthDate:(NSInteger)aMonthDay currentDate:(NSDate *)aCurrentDate{
#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_8_0
    NSInteger unitFlagsYearMonthDay = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;
    NSInteger unitFlagsHourMinuteSecond =NSCalendarUnitHour | NSCalendarUnitMinute |NSCalendarUnitSecond ;
    NSInteger unitFlagsDay = NSCalendarUnitDay;
    NSInteger unitFlagsMonth = NSCalendarUnitMonth;
#else
    NSInteger unitFlagsYearMonthDay = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
    NSInteger unitFlagsHourMinuteSecond =NSHourCalendarUnit | NSMinuteCalendarUnit |NSSecondCalendarUnit ;
    NSInteger unitFlagsDay = NSDayCalendarUnit;
    NSInteger unitFlagsMonth = NSMonthCalendarUnit;
#endif
    NSDate *dateOut = nil;
    NSTimeInterval count = 0;
    NSCalendar *calendar = [NSCalendar currentCalendar];
  //获取当前月的开始日期
    BOOL b = [calendar rangeOfUnit:unitFlagsMonth startDate:&dateOut interval:&count forDate:aCurrentDate];
    if(b)
    {
        //
        NSDateComponents *comptGetDayMonthYear = [calendar components:unitFlagsYearMonthDay fromDate:dateOut];
        NSDateComponents *comptGetDay = [calendar components:unitFlagsDay fromDate:aCurrentDate];
        NSDateComponents *comptGetHourMinuteSecond = [calendar components:unitFlagsHourMinuteSecond fromDate:aCurrentDate ];
        [comptGetDayMonthYear setHour:comptGetHourMinuteSecond.hour];
        [comptGetDayMonthYear setMinute:comptGetHourMinuteSecond.minute];
        [comptGetDayMonthYear setSecond:comptGetHourMinuteSecond.second];


        NSDate *tWeekDayDate = [calendar dateFromComponents:comptGetDayMonthYear];
        NSRange range = [calendar rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:tWeekDayDate];
        NSInteger tMonthDayCount = range.length;
        NSInteger tCount = 1;
        //如果当前月的最大天数大于所选的日期
        while ((aMonthDay+1) > tMonthDayCount) {
            [comptGetDayMonthYear setMonth:(comptGetDayMonthYear.month +tCount)];
            tWeekDayDate = [calendar dateFromComponents:comptGetDayMonthYear];
            range = [calendar rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:tWeekDayDate];
            tMonthDayCount = range.length;
            tCount++;

        }
        //所选日子小于今天的日期
        if ((aMonthDay+1) < comptGetDay.day) {
            NSTimeInterval tTimeInterval = 60*60*24*(tMonthDayCount + aMonthDay);
            NSDate *tFinalDate = [tWeekDayDate dateByAddingTimeInterval:tTimeInterval];
            return tFinalDate;
        }else{
            NSTimeInterval tTimeInterval = (aMonthDay)*60*60*24;
            NSDate *tFinalDate = [tWeekDayDate dateByAddingTimeInterval:tTimeInterval];
            return tFinalDate;
        }

    }
    return aCurrentDate;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值