2013-02-28 17 views
7

bir ay içinde ilk gün alın Bu ayın birini almak için gereken bir yöntem bu alt kümesi var. 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

sonra 2013-03-01 09:53:49 +0000, sonraki ayın ilk gününü yazdırır.

Geçerli ayın ilk gününü nasıl alabilirim?

cevap

16

Mantığınız yanlış: Tarih gününü 1 olarak ayarlamak yerine, geçerli tarihe bir gün ekliyorsunuz demektir. Böyle

deneyin şey:

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

ilk gününü almak için tarih biçimlendirici kullanarak daha iyi! Yöntem adını yanlış. Teşekkür ederim! Cevap :-) kabul edecek :-) – hakonbogen

+2

Ok, @Fabian Kreiser, kodu olduğu gibi kullandım ve bana sonuç veriyor: '2015-05-31 21:00:00 UTC'. Bugün '2015-06-08 8: 36'. İlk gün geri dönmez, ancak önceki aydan devam eder mi? – new2ios

1

yerine [NSCalender dateFromComponents:] istiyorum:

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

kolay yolu Bir önceki ayın ilk ve son tarihini al:

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

Umut bu bellek kullanımına pahalı yeni bir değişken oluşturarak

1

Kolay Yolu: Belirli bir tarihten itibaren 1'ine almanın

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

yardımcı olur, bu geçerli ay

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]]; 
Tabii
0
NSDate *startDate = nil; 
[[NSCalendar currentCalendar] rangeOfUnit:NSCalendarUnitMonth startDate:&startDate interval:NULL forDate:date]; 

return startDate;