2016-08-07 21 views
5

Tôi có giá trị NSDate. Tôi cần phải kiểm tra (so sánh với hệ thống hiện tại thời gian) nếu đó là ngày hôm qua hay không. Tôi nghĩ điều đó thật dễ dàng vì tôi chỉ có thể kéo giá trị ngày ra khỏi số NSDate và +1 để so sánh nó. Nhưng ngay sau đó, tôi nhận ra đó là một ý tưởng không phù hợp bởi vì nếu nó kết thúc trong tháng, hãy nói ngày 31 tháng 7. Và ngày hôm sau không phải là ngày 31 tháng 7, là ngày 01 tháng 8Swift - Cách kiểm tra xem NSDate có được so sánh với thời gian hiện tại không?

Cách hiệu quả nhất để kiểm tra xem NSDate là ngày hôm qua (so với thời điểm hiện tại)?

+0

Chỉ cần làm rõ, bạn có muốn tìm hiểu xem đó là gần 24 giờ trước hoặc chỉ là ngày ít hơn một ngày, bỏ qua các thành phần thời gian? – ColGraff

+0

Cảm ơn bạn đã hỏi điều này. Tôi chỉ muốn tìm hiểu xem ngày có ít hơn một ngày không, không phải 24 giờ trước. Và câu trả lời của rob hoàn toàn giải quyết được vấn đề của tôi. Nếu bạn có câu trả lời tốt hơn, hãy để nó ở đó. Tôi chắc chắn sẽ kiểm tra nó ra! –

+0

Không, địa điểm của anh ấy đang diễn ra. Tôi chỉ kiểm tra để chắc chắn. – ColGraff

Trả lời

11

Tính đến iOS 8.0, bạn có thể sử dụng -[NSCalendar isDateInYesterday:], như thế này:

let calendar = NSCalendar.autoupdatingCurrentCalendar() 

let someDate: NSDate = some date... 
if calendar.isDateInYesterday(someDate) { 
    // It was yesterday... 
} 

Nếu bạn sẽ được làm điều này rất nhiều, bạn nên tạo lịch một lần và giữ nó trong một biến Ví dụ, vì tạo đối tượng lịch không phải là tầm thường.

+1

Tôi đã làm một số thử nghiệm sơ bộ và tôi không tin rằng việc giữ một biến cá thể của 'NSCalendar.autoupdatingCurrentCalendar()' là tốt hơn là lấy nó mỗi lần. Nó sẽ là một tham chiếu một trong hai cách. – ColGraff

+0

[Dường như 'NSCalendar' trở nên ít tốn kém hơn để tạo trong iOS 7/OS X 10.9.] (Http://mikeabdullah.net/NSCalendar_currentCalendar.html) –

+0

Bạn có nghĩ rằng NSDateFormatter cũng vậy không? –

5

Trong Swift 3.0 API đã thay đổi:

NSCalendar.current.isDateInToday(yourDate) 
NSCalendar.current.isDateInYesterday(yourDate) 
NSCalendar.current.isDateInTomorrow(yourDate) 

Để có được ngày hiện tại:

let now = Date() 
Các vấn đề liên quan