2013-02-28 17 views
7

私はこの月の1日目を取得する必要があるメソッドのこのサブセットを持っています。NSCalendarから1ヶ月の最初の日を取得する

NSDate *today = [NSDate date]; // returns correctly 28 february 2013 
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *components = [[NSDateComponents alloc] init]; 
components.day = 1; 
NSDate *dayOneInCurrentMonth = [gregorian dateByAddingComponents:components toDate:today options:0]; 

dayOneInCurrentMonthはその後、翌月の最初の日を2013-03-01 09:53:49 +0000を出力します。

今月の1日目を取得するにはどうすればよいですか?

答えて

16

ロジックが間違っています:日付の日を1に設定する代わりに、現在の日付に1日を追加しています。

そのような何か試してみてください:指定された日付から1日になっての

NSDate *dayOneInCurrentMonth = [gregorian dateFromComponents:components]; 
+0

の最初の日を取得するには日付フォーマッタを使用して、より良いです!メソッド名を誤解しています。ありがとうございました!答えを受け入れるでしょう:-) – hakonbogen

+2

@Fabian Kreiserさん、コードをそのまま使用しました。結果は「2015-05-31 21:00:00 UTC」です。今日は '2015-06-08 8:36'です。 1日目は返されませんが、前月の最後の日は返されますか? – new2ios

1

を前月の最初と最後の日付は次のとおりです。

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 
NSDateComponents *comp = [gregorian components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:[NSDate date]]; 

//TO GET PREVIOUS MONTH LAST DAY 
[comp setMonth:[comp month]]; 
[comp setDay:1]; 
NSDate *tDateMonth = [gregorian dateFromComponents:comp]; 
NSLog(@"LAST DAY OF PREVIOUS MONTH ; %@", tDateMonth); 

//TO GET PREVIOUS MONTH FIRST DAY 
[comp setMonth:[comp month]-1]; 
[comp setDay:3]; 
NSDate *td = [gregorian dateFromComponents:comp]; 
NSLog(@"FIRST DAY OF PREVIOUS MONTH ; %@", td); 

ホープ、これはメモリ使用量に高価であり、新しい変数を作成することにより

1

簡単な方法:

NSDate *first = [gregorian dateBySettingUnit:NSCalendarUnitDay value:1 ofDate:date options:0]; 
1

簡単な方法をあなたが代わりに[NSCalender dateFromComponents:]をしたい

NSDate *today = [NSDate date]; 
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 

NSDateComponents *components = [gregorian components:(NSEraCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit) fromDate:today]; 
components.day = 1; 

NSDate *dayOneInCurrentMonth = [gregorian dateFromComponents:components]; 
0

を助け、それが現在の月

today = [NSDate date]; 

firstDayDateFormatter = [[NSDateFormatter alloc] init]; 
[firstDayDateFormatter setDateFormat:@"01-MM-yyyy"]; 
dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"dd-MM-yyyy"]; 
[dateFormatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US"]]; 
firstDayOfTheMonth = [mdfDateFormat dateFromString:[firstDayDateFormatter stringFromDate:today]]; 
もちろん
0
NSDate *startDate = nil; 
[[NSCalendar currentCalendar] rangeOfUnit:NSCalendarUnitMonth startDate:&startDate interval:NULL forDate:date]; 

return startDate; 
関連する問題