在自己的项目中有这个需求,在网上找了下,没有找到理想的结果,就东拼西凑的把大家的想法,集合在一起,加上自己的想法,实现了这个功能。
温馨提示:测试了将来某个日期是星期几,未测试过去的某个日期是星期几
实现思路
大概的实现方式和大家分享下,有不对的地方欢迎大家留言指教,相互学习
首先计算 未来的 某个日期 和 当前日期相差天数
在获取当前是星期几(返回结果如下格式)
1
2
3
4
5
6
7
|
1--星期天
2--星期一
3--星期二
4--星期三
5--星期四
6--星期五
7--星期六
|
最后在当前星期 基础上 加上 相差天数,就获取未来那个日期所对应的星期(此处可以将 (相差天数 % 7),结果就更加明了相差的天数(结果是0,说明未来的某个日期的星期就是对应当前的星期),7代表的一周共7天
实现代码
代码中本人已经写了很详细的说明,在这里就一一单独说了,代码分为3段,如下
第一段代码:
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
;
}
|
第二段代码
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
|
/**
* 计算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
;
}
}
|
第三段代码
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
]
;
}
|