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

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

2016-02-01 16:41 447 查看
在自己的项目中有这个需求,在网上找了下,没有找到理想的结果,就东拼西凑的把大家的想法,集合在一起,加上自己的想法,实现了这个功能。

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


实现思路

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

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

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

Default

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

实现代码

代码中本人已经写了很详细的说明,在这里就一一单独说了,代码分为3段,如下第一段代码:获取未来某一日期是星期几Objective-C

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

/**

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

* 注意: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

123456789101112131415161718192021222324252627/** * 计算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

1

2

3

4

5

6

7

8

9

10

11

12

// 获取当前是星期几

-
(NSInteger)getNowWeekday
{

NSCalendar
*calendar
=
[[NSCalendar
alloc]
initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents
*comps
=
[[NSDateComponents
alloc]
init];

NSInteger
unitFlags
=
NSYearCalendarUnit
|
NSMonthCalendarUnit
|
NSDayCalendarUnit
|
NSWeekdayCalendarUnit
|

NSHourCalendarUnit
|
NSMinuteCalendarUnit
|
NSSecondCalendarUnit;

NSDate
*now
=
[NSDate
date];

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

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

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

return
[comps
weekday];

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: