NSCalendar : 月末が第何週目か取得する方法

NSCalendar クラスの ordinalityOfUnit:inUnit:forDate:メソッドが便利だったのでメモしておきます。
例えば、月末が月の第何周であるか?とか調べるのに利用できます。
その他、年内で第何周であるか?とかも調べられるはず。

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
// NSDate にカテゴリでメソッドを追加しておく
@interface NSDate (DateAdditions)
 
// 月の日数を取得する
- (NSUInteger)getNumberOfDaysInMonth
{
    return [[NSCalendar currentCalendar] rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:self].length;
}
 
		:
		:
// 月の日数を取得する
NSDate *todayDate = [NSDate date];
NSUInteger lastdayInMonth = [todayDate getNumberOfDaysInMonth];
 
// 本日日付を年月日で分解する
NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *dateComps = [cal components:NSYearCalendarUnit | 
                                              NSMonthCalendarUnit |
                                              NSDayCalendarUnit
                                     fromDate:[NSDate date]];
// 月末日付を取得する
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setYear:dateComps.year];
[comps setMonth:dateComps.month];
[comps setDay:lastdayInMonth];
NSDate *lastDate = [cal dateFromComponents:comps];
[comps release];
 
// 月末が第何週目か取得する
NSUInteger lastdayWeekNo = [cal ordinalityOfUnit:NSWeekCalendarUnit 
                                          inUnit:NSMonthCalendarUnit 
                                         forDate:lastDate];
// 本日が月の第何週目か取得する
NSUInteger todayWeekNo = [cal ordinalityOfUnit:NSWeekCalendarUnit 
                                        inUnit:NSMonthCalendarUnit 
                                       forDate:[NSDate date]];

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です