巧妙利用日期格式计算出本周所有日期

1、先解释一下,如题意思为如果今天是星期三,那么我想返回从星期一到星期天的所有日期
2、设计思路:
2.1、通过日期格式得到今天为星期几,将这个“星期几”转换成数字1~7
2.2、通过从0~7循环分别用1-7减去上述数字得到本周每天距离今天的天数差,如今天星期三,那么星期一距离今天-2天,星期二距离今天-1天,星期五距离今天2天
2.3、将天数换算成秒,通过NSDATE的方法得出7天的日期对象,再转换成字符串,搞定!
3、写成NSDATE的分类,直接使用。

代码示例:
NSDate+SA.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//
//? NSDate+SA.h
//? 
//
//? Created by yusian on 15-3-19.
//? Copyright (c) 2015年 Sian. All rights reserved.
//
?
#import <foundation /Foundation.h>
?
@interface NSDate (SA)
?
// 根据日期获取星期,返回数字(1~7)
+ (NSInteger)weekDayWithDate:(NSDate *)date;
?
// 日期转换成字符串,格式如:2015-03-19 17:36:34
+ (NSString *)formateDate:(NSDate *)date;
?
// 本周日期字符串数组
+ (NSArray *)currentWeekDays;
?
@end</foundation>


NSDate+SA.m

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
//
//? NSDate+SA.m
//? 
//
//? Created by yusian on 15-3-19.
//? Copyright (c) 2015年 Sian. All rights reserved.
//
?
#import "NSDate+SA.h"
?
@implementation NSDate (SA)
?
// 本周日期字符串数组
+ (NSArray *)currentWeekDays;
{
????NSMutableArray *array = [NSMutableArray array];
????// 获取今天星期几(数字)
????NSInteger today = [self weekDayWithDate:[self date]];
????for (int i = 0; i < 7; i++) {
????????// 周一到周日七天距离今天的时间差(以秒为单位)
????????double timeInterval = (i + 1 - today) * 24 * 60 * 60;
????????// 周一到周日的DATE对象
????????NSDate *date = [self dateWithTimeIntervalSinceNow:timeInterval];
????????// 周一到周日的字符串对象
????????NSString *dateStr = [self formateDate:date];
????????// 添加到数组
????????[array addObject:dateStr];
????}
????return array;
}
?
// 日期转换成字符串,格式如:2015-03-19 17:36:34
+ (NSString *)formateDate:(NSDate *)date
{
????NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
????formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
????return [formatter stringFromDate:date];
}
?
// 根据日期获取星期,返回数字(1~7)
+ (NSInteger)weekDayWithDate:(NSDate *)date
{
????NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
????formatter.dateFormat = @"EEEE";
????// 得到日期那天星期几
????NSString *weekday = [formatter stringFromDate:date];
????// 将星期转换成对应数字
????return [self weekNumberWithWeekDayString:weekday];
}
?
// 将星期转换成数字(星期一:1, 星期二:2, 星期三:3 ...)
+ (NSInteger)weekNumberWithWeekDayString:(NSString *)weekDay
{
????if ([weekDay isEqualToString:@"星期一"]) return 1;
????if ([weekDay isEqualToString:@"星期二"]) return 2;
????if ([weekDay isEqualToString:@"星期三"]) return 3;
????if ([weekDay isEqualToString:@"星期四"]) return 4;
????if ([weekDay isEqualToString:@"星期五"]) return 5;
????if ([weekDay isEqualToString:@"星期六"]) return 6;
????if ([weekDay isEqualToString:@"星期日"]) return 7;
????return 0;
}
?
@end

Leave a Reply