2012-01-13 34 views
5

Tôi muốn nhận được sự khác biệt giữa các ngày bỏ qua thời gian có nghĩa là nếu một ngày là 13 tháng 1 năm 2012 - 11 giờ tối và ngày khác là 14 tháng 1 năm 2012 - 12 giờ sáng, thì sự khác biệt phải là 1 ngày không phải 0 ngày. chỉ, ngày 14 tháng 1 năm 2012 - ngày 13 tháng 1 năm 2012, thời gian bỏ qua. Tôi biết tôi có thể sử dụng NSDate api để tính toán sự khác biệt nhưng vấn đề là nó xem xét thời gian also.So tôi nghĩ trong khi tính toán sự khác biệt tôi sẽ bỏ qua thời gian nhưng tôi không biết làm thế nào để bỏ qua thời gian bởi vì nếu tôi sử dụng NSDateFormatter nó sẽ trở lại chuỗi không ngày. Xin hãy giúp tôi những gì tôi có thể làm?Làm cách nào để bỏ qua thời gian trong NSDate?

Cảm ơn trước!

Trả lời

7

Điều bạn cần làm là nhận được NSDateComponents của mỗi ngày trước. Một khi bạn làm điều đó bạn có thể so sánh các thành phần 'ngày' để giúp bạn có sự khác biệt.

NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
[cal setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 
NSDate *date1 = ....; 
NSDate *date2 = ....; 
NSDateComponents *comps1 = [cal components:NSDayCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit fromDate:date1]; 
NSDateComponents *comps2 = [cal components:NSDayCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit fromDate:date2]; 

date1 = [cal dateFromComponents:comps1]; 
date2 = [cal dateFromComponents:comps2]; 

NSDateComponents *diffComps = [cal components:NSDayCalendarUnit fromDate:date1 toDate:date2 options:0]; 

NSLog(@"Days diff = %d", diffComps.day); 

API ngày có thể hơi lạ khi quấn đầu, nhưng khi bạn làm điều đó khá mạnh.

+0

Điều gì sẽ xảy ra nếu có sự khác biệt trong năm hoặc tháng? –

+0

Sửa mã để xử lý. –

+0

Xin lỗi vì đã đặt câu hỏi này nhưng tôi thực sự không hiểu, "initWithCalendarIdentifier" là gì? Nếu Lịch trong iPad bị thay đổi thì sao? –

Các vấn đề liên quan