8

今月の初日を取得する必要があるメソッドのこのサブセットがあります。

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];

dayOneInCurrentMonth2013-03-01 09:53:49 +0000次に、翌月の初日に印刷します。

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

4

6 に答える 6

17

あなたの論理は間違っています:日付の日を1に設定する代わりに、現在の日付に日を追加しています。

そのようなことを試してください:

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];
于 2013-02-28T10:06:00.350 に答える
1

[NSCalender dateFromComponents:]代わりに必要なもの:

NSDate *dayOneInCurrentMonth = [gregorian dateFromComponents:components];
于 2013-02-28T10:06:08.260 に答える
1

特定の日付から1日に到達する簡単な方法:

NSDate *first = [gregorian dateBySettingUnit:NSCalendarUnitDay value:1 ofDate:date options:0]; 
于 2015-02-11T22:57:32.467 に答える
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);

お役に立てれば

于 2016-01-20T15:33:40.890 に答える
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]];
于 2016-03-30T02:46:50.347 に答える
0
NSDate *startDate = nil;
[[NSCalendar currentCalendar] rangeOfUnit:NSCalendarUnitMonth startDate:&startDate interval:NULL forDate:date];

return startDate;
于 2017-08-05T10:07:06.493 に答える