2013-03-25 37 views
10

Tôi cần nhận tuần và tháng trước từ ngày hiện tại.NSDate nhận tuần trước, số tháng trước

Vì vậy, tôi tìm thấy giải pháp mà có thể tính toán lại ngày hiện tại thêm khoảng

- dateByAddingTimeInterval 

Và đây params cho nó:

[[NSDate date] dateByAddingTimeInterval: -604800.0] (để nhận tuần trước)

[[NSDate date] dateByAddingTimeInterval: -2629743.83] (để nhận tháng trước)

Khi tôi nghĩ rằng để nhận được tuần, phương pháp này hoạt động tốt mà không có bất kỳ vấn đề nào, bởi vì mỗi tuần có bảy ngày và khoảng thời gian không thay đổi. Nhưng trong tháng chúng tôi có một vấn đề bởi vì mỗi tháng có số ngày khác nhau.

+0

Nó sẽ phá vỡ ngay cả trong nhiều tuần tại các khu vực chuyển sang giờ tiết kiệm ánh sáng ban ngày, bởi vì tuần vào các ngày chuyển đổi sẽ ngắn hơn/lâu hơn một giờ. – dasblinkenlight

Trả lời

35

Sử dụng NSDateComponents nó sẽ được dễ dàng và chính xác

NSCalendar *calendar = [NSCalendar currentCalendar]; 
NSDateComponents *comps = [NSDateComponents new]; 
comps.month = -1; 
comps.day = -1; 
NSDate *date = [calendar dateByAddingComponents:comps toDate:[NSDate date] options:0]; 
NSDateComponents *components = [calendar components:NSMonthCalendarUnit|NSDayCalendarUnit fromDate:date]; // Get necessary date components 
NSLog(@"Previous month: %d",[components month]); 
NSLog(@"Previous day : %d",[components day]); 
+3

Điều này có tự động xử lý thay đổi một năm không? – Siriss

+0

Nó hoạt động .. giữ nó lên (Y) –

9

Không sử dụng 903.484 và -23.484 cho ngày thay đổi

làm theo cách này:

NSCalendar *gregorian=[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *components=[[NSDateComponents alloc] init]; 

components.month=1;//next month 
components.month=-1;//previous month 
//similarly +1 and -1 will give you week and month day etc 
components.week=1; 
components.day=1; 

NSDate *myMonth=[gregorian dateByAddingComponents:components toDate:today options:0]; 
NSDateComponents *components = [calendar components:NSMonthCalendarUnit|NSDayCalendarUnit fromDate:date]; 
NSInteger yourRequiredValue=[components day]; //day, month, week etc 
Các vấn đề liên quan