2013-02-28 125 views
7

我有一個方法的子集,需要獲得當月的第一天。從NSCalendar獲取第一天的月份

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,下個月的第一天。

我該如何獲得當月的第一天?

回答

16

您的邏輯錯誤:將日期設置爲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]; 
+0

當然的第一天!誤讀方法名稱。謝謝!將接受答案:-) – hakonbogen 2013-02-28 10:08:13

+2

好的,@Fabian Kreiser,我使用了代碼,它給了我結果:'2015-05-31 21:00:00 UTC'。今天是'2015-06-08 8:36'。它不會返回第一天,而是從上個月返回? – new2ios 2015-06-08 07:37:04

1

你想[NSCalender dateFromComponents:]代替:

NSDate *first = [gregorian dateBySettingUnit:NSCalendarUnitDay value:1 ofDate:date options:0]; 
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 *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; 
相關問題