iOS开发 根据某个日期计算是星期几

来源:互联网 发布:淘宝amp服务商 编辑:程序博客网 时间:2024/04/29 15:42

// 附注:直接复制粘贴代码即可

#pragma mark -获取周几

/**

 *  获取未来某个日期是星期几

 *  注意:featureDate传递过来的格式 必须 formatter.dateFormat一致,否则endDate可能为nil

 *

 */

- (NSString *)featureWeekdayWithDate:(NSString *)featureDate{

    // 创建 格式 对象

    NSDateFormatter *formatter = [[NSDateFormatteralloc] init];

    // 设置日期 格式可以根据自己的需求 随时调整,否则计算的结果可能为 nil

    formatter.dateFormat = @"yyyy-MM-dd";

    // 将字符串日期 转换为 NSDate类型

    NSDate *endDate = [formatter dateFromString:featureDate];

    // 判断当前日期 未来某个时刻日期相差的天数

    long days = [selfdaysFromDate:[NSDatedate] toDate:endDate];

    // 将总天数换算为 计算(假如相差10天,其实就是等于相差 1周零3天,只需要取3天,更加方便计算)

    long day = days >= 7 ? days % 7 : days;

    long week = [selfgetNowWeekday] + day;

    switch (week) {

        case 1:

            return @"星期天";

            break;

        case 2:

            return @"星期一";

            break;

        case 3:

            return @"星期二";

            break;

        case 4:

            return @"星期三";

            break;

        case 5:

            return @"星期四";

            break;

        case 6:

            return @"星期五";

            break;

        case 7:

            return @"星期六";

            break;

            

        default:

            break;

    }

    return nil;

}


/**

 *  计算2个日期相差天数

 *  startDate   起始日期

 *  endDate     截至日期

 */

-(NSInteger)daysFromDate:(NSDate *)startDate toDate:(NSDate *)endDate {

    NSDateFormatter *dateFormatter=[[NSDateFormatteralloc] init];

    // 话说在真机上需要设置区域,才能正确获取本地日期,天朝代码:zh_CN

    dateFormatter.locale = [[NSLocalealloc] initWithLocaleIdentifier:@"zh_CN"];

    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

    //得到相差秒数

    NSTimeInterval time = [endDate timeIntervalSinceDate:startDate];

    int days = ((int)time)/(3600*24);

    int hours = ((int)time)%(3600*24)/3600;

    int minute = ((int)time)%(3600*24)/3600/60;

    if (days <= 0 && hours <=0&&minute<= 0) {

        NSLog(@"00小时0分钟");

        return 0;

    }

    else {

        NSLog(@"%@",[[NSStringalloc] initWithFormat:@"%i%i小时%i分钟",days,hours,minute]);

        // 之所以要 + 1,是因为此处的days 计算的结果不包含当天 最后一天\

        (如星期一 星期四,计算机算的结果就是2天(星期二和星期三),日常算,星期一——星期四相差3天,所以需要+1\

        对于时分没有进行计算 可以忽略不计

        return days + 1;

    }

}


// 获取当前是星期几

- (NSInteger)getNowWeekday {

    NSCalendar *calendar = [[NSCalendaralloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

    NSDateComponents *comps = [[NSDateComponentsalloc] init];

    NSInteger unitFlags =NSCalendarUnitYear | NSCalendarUnitMonth |NSCalendarUnitDay | NSCalendarUnitWeekday |

    NSCalendarUnitHour |NSCalendarUnitMinute | NSCalendarUnitSecond;

    NSDate *now = [NSDatedate];

    // 话说在真机上需要设置区域,才能正确获取本地日期,天朝代码:zh_CN

    calendar.locale = [[NSLocalealloc] initWithLocaleIdentifier:@"zh_CN"];

    comps = [calendar components:unitFlags fromDate:now];

    return [comps weekday];

}




0 0