【Xcode,iOS,Obective-C】今月の末日、翌月の初日、今月の日数を求めるロジックメモ
あまり参考になる記事がググっても見つからず、自分流のロジックを作ったのでメモ。
- (void)viewDidLoad { [super viewDidLoad]; //今日の日付を取得 NSDate *nowdate = [NSDate date]; //フォーマッターを準備 NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]]; [formatter setDateFormat:@"yyyyMMdd"]; //西暦と月のデータをNSStringで生成 NSString *today = [formatter stringFromDate:nowdate]; NSString *thisMonth = [today substringWithRange:NSMakeRange(0,6)]; //西暦と月のNSStringを一度数字にして+1して翌月を求め"01"を追加し翌月の初日を生成する //ただし、12月の場合は89を足して翌年1月を生成する NSString *nextMonthFirstDay = nil; if ([[thisMonth substringWithRange:NSMakeRange(4, 2)] isEqual: @"12"]) { nextMonthFirstDay = [NSString stringWithFormat:@"%d", [thisMonth intValue] +89]; } else { nextMonthFirstDay = [NSString stringWithFormat:@"%d", [thisMonth intValue] +1]; } nextMonthFirstDay = [NSString stringWithFormat:@"%@%@", nextMonthFirstDay, @"01"]; //1日戻すためNSDateに変換 //翌月の初日を算出したい場合はここでゲット! NSDate* formatterDate = [formatter dateFromString:nextMonthFirstDay]; // 1日前へ戻す(-86400秒) //addTimeIntervalはiOS4までだと警告が出るので、dateByAddingTimeIntervalを使う事 //ここで今月の末日を算出したい場合はここでゲット! formatterDate = [formatterDate dateByAddingTimeInterval: -1 *24 *60 *60]; //今月の総日数を算出したい場合はここでゲット! NSString *thisMonthLastDay = [formatter stringFromDate:formatterDate]; thisMonthLastDay = [thisMonthLastDay substringWithRange:NSMakeRange(6, 2)]; }