您的位置:首页 > 移动开发 > IOS开发

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

2015-06-23 17:38 537 查看
在自己的项目中有这个需求,在网上找了下,没有找到理想的结果,就东拼西凑的把大家的想法,集合在一起,加上自己的想法,实现了这个功能。

温馨提示:测试了将来某个日期是星期几,未测试过去的某个日期是星期几

实现思路

大概的实现方式和大家分享下,有不对的地方欢迎大家留言指教,相互学习

首先计算 未来的 某个日期 和 当前日期相差天数

在获取当前是星期几(返回结果如下格式)

1--星期天

2--星期一

3--星期二

4--星期三

5--星期四

6--星期五

7--星期六

最后在当前星期 基础上 加上 相差天数,就获取未来那个日期所对应的星期(此处可以将 (相差天数 % 7),结果就更加明了相差的天数(结果是0,说明未来的某个日期的星期就是对应当前的星期),7代表的一周共7天

实现代码

代码中本人已经写了很详细的说明,在这里就一一单独说了,代码分为3段,如下

第一段代码:

/**
*  获取未来某个日期是星期几
*  注意:featureDate 传递过来的格式 必须 和 formatter.dateFormat 一致,否则endDate可能为nil
*
*/
- (NSString *)featureWeekdayWithDate:(NSString *)featureDate{
// 创建 格式 对象
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
// 设置 日期 格式 可以根据自己的需求 随时调整, 否则计算的结果可能为 nil
formatter.dateFormat = @"yyyy-MM-dd";
// 将字符串日期 转换为 NSDate 类型
NSDate *endDate = [formatter dateFromString:featureDate];
// 判断当前日期 和 未来某个时刻日期 相差的天数
long days = [self daysFromDate:[NSDate date] toDate:endDate];
// 将总天数 换算为 以 周 计算(假如 相差10天,其实就是等于 相差 1周零3天,只需要取3天,更加方便计算)
long day = days >= 7 ? days % 7 : days;
long week = [self getNowWeekday] + 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个日期相差天数Objective-C

/**
*  计算2个日期相差天数
*  startDate   起始日期
*  endDate     截至日期
*/
-(NSInteger)daysFromDate:(NSDate *)startDate toDate:(NSDate *)endDate {
NSDateFormatter *dateFormatter=[[NSDateFormatter alloc] init];
// 话说在真机上需要设置区域,才能正确获取本地日期,天朝代码:zh_CN
dateFormatter.locale = [[NSLocale alloc] 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(@"0天0小时0分钟");
return 0;
}
else {
NSLog(@"%@",[[NSString alloc] initWithFormat:@"%i天%i小时%i分钟",days,hours,minute]);
// 之所以要 + 1,是因为 此处的days 计算的结果 不包含当天 和 最后一天\
(如星期一 和 星期四,计算机 算的结果就是2天(星期二和星期三),日常算,星期一——星期四相差3天,所以需要+1)\
对于时分 没有进行计算 可以忽略不计
return days + 1;
}
}


第三段代码

获取当前是星期几Objective-C

// 获取当前是星期几
- (NSInteger)getNowWeekday {
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *comps = [[NSDateComponents alloc] init];
NSInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit |
NSHourCalendarUnit | NS
4000
MinuteCalendarUnit | NSSecondCalendarUnit;
NSDate *now = [NSDate date];
// 话说在真机上需要设置区域,才能正确获取本地日期,天朝代码:zh_CN
calendar.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];
comps = [calendar components:unitFlags fromDate:now];
return [comps weekday];
}


本文为原创内容:来自本人博客(软曼网)http://www.ruanman.net/archives/7308.html

如发现csdn 有错位等情况,请访问原文地址查看,效果更佳
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  开发 ios 格式