2012-11-09 34 views
7

Tôi mới sử dụng Xcode và tôi gặp sự cố sau:Làm thế nào để sử dụng NSTimeInterval đúng cách?

Tôi muốn một phương pháp cho tôi thời gian trôi qua kể từ một ngày nhất định cho đến bây giờ. Nếu đã 2 năm trước, tôi muốn trả lại một chuỗi "2 năm trước", nhưng nếu đã là 5 phút trước, tôi muốn nó trả về một chuỗi với "5 phút trước".

Tôi đã kiểm tra NSTimeInterval và NSDateFormatter nhưng tôi không thể tìm cách làm cho nó hoạt động.

+1

câu hỏi này đã được trả lời ở đây có thể là một trăm lần. Có gì khó khăn về googling? – jimpic

+2

Bạn có thể phải tự viết. Nó gây sốc, tôi biết. – trojanfoe

Trả lời

14

Chỉ cần để giúp bạn bắt đầu ...

Bạn sẽ tạo ra một ngày tham chiếu như thế này:

NSCalendar *gregorian = [[NSCalendar alloc] 
          initWithCalendarIdentifier:NSGregorianCalendar]; 

NSDateComponents *dateComponents = [[NSDateComponents alloc] init]; 
dateComponents.year = 2012; 
dateComponents.month = 1; 
dateComponents.day = 1; 
dateComponents.hour = 0; 
dateComponents.minute = 0; 
dateComponents.second = 0; 

NSDate *referenceDate = [gregorian dateFromComponents: dateComponents]; 

Hôm nay có thể đạt được như thế này:

NSDate *now = [NSDate date]; 

Đo khoảng thời gian là tính bằng giây, vì vậy ...

NSTimeInterval interval = [now timeIntervalSinceDate:referenceDate]; 
NSLog (@"reference date was %.0f seconds ago", interval); 

Tôi chắc chắn bạn sẽ có thể tự mình tìm ra từ đây ...

This answer có thể giúp bạn.

2

Cảm ơn bạn, tôi đã tự hỏi liệu có cách nào dễ dàng hơn để thực hiện nó mà không có quá nhiều dòng mã.

Bạn có thể tạo các tài liệu tham khảo ngày như thế này:

NSDate *referenceDate = [NSDate date]; 
[[NSCalendar currentCalendar] rangeOfUnit:NSYearCalendarUnit 
           startDate:&referenceDate 
           interval:NULL 
            forDate:referenceDate]; 

hoặc bạn thử điều này: https://github.com/billgarrison/SORelativeDateTransformer

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