2016-05-25 18 views
20

Tôi đang làm việc về phát triển ios và tôi thấy thật khó để kiểm tra xem hai NSDates có từ cùng một ngày hay không. Tôi cố gắng để sử dụng nàyLàm thế nào để kiểm tra xem hai NSDates là từ cùng một ngày

fetchDateList() 
    // Check date 
    let date = NSDate() 
    // setup date formatter 
    let dateFormatter = NSDateFormatter() 
    // set current time zone 
    dateFormatter.locale = NSLocale.currentLocale() 

    let latestDate = dataList[dataList.count-1].valueForKey("representDate") as! NSDate 
    //let newDate = dateFormatter.stringFromDate(date) 
    let diffDateComponent = NSCalendar.currentCalendar().components([NSCalendarUnit.Year, NSCalendarUnit.Month, NSCalendarUnit.Day], fromDate: latestDate, toDate: date, options: NSCalendarOptions.init(rawValue: 0)) 
    print(diffDateComponent.day) 

nhưng nó chỉ kiểm tra nếu hai NSDates có một sự khác biệt của 24 giờ. Tôi nghĩ rằng có một cách để làm cho nó hoạt động nhưng vẫn còn, tôi muốn có giá trị NSDate trước 2 giờ sáng vào buổi sáng để được tính là ngày hôm trước, vì vậy tôi chắc chắn cần một số trợ giúp ở đây. Cảm ơn!

Trả lời

65

NSCalendar có một phương pháp mà thực hiện chính xác những gì bạn muốn thực sự!

/* 
    This API compares the Days of the given dates, reporting them equal if they are in the same Day. 
*/ 
- (BOOL)isDate:(NSDate *)date1 inSameDayAsDate:(NSDate *)date2 NS_AVAILABLE(10_9, 8_0); 

Vì vậy, bạn muốn sử dụng nó như thế này:

[[NSCalendar currentCalendar] isDate:date1 inSameDayAsDate:date2]; 

Hoặc trong Swift

Calendar.current.isDate(date1, inSameDayAs:date2) 
+1

Cập nhật nhỏ: Trong Swift 3.0 Xcode 8.2 Cú pháp:' if NSCalendar.current.isDate (date1, inSameDayAs: date2) == true) {// làm công cụ của bạn} ' – KuboAndTwoStrings

+1

Có vẻ như không hoạt động cho các ngày cụ thể như' 2017-06-12T00: 00: 00.000Z' và '2017-06-12T23: 59: 59.999Z' ->" 23:59 : 59 "rơi vào ngày hôm sau do một số lý do (múi giờ của tôi là +2 và 21:59:59 hoạt động tốt). Dường như làm điều gì đó với múi giờ, nhưng tôi đã không tìm ra cách làm cho nó hoạt động. –

+0

Đó có phải là chuyển đổi DST không? Nếu như vậy ngày đó chỉ có thể có 23 giờ. –

4

Bạn nên so sánh các thành phần ngày:

let date1 = NSDate(timeIntervalSinceNow: 0) 
let date2 = NSDate(timeIntervalSinceNow: 3600) 

let components1 = NSCalendar.currentCalendar().components([.Year, .Month, .Day], fromDate: date1) 
let components2 = NSCalendar.currentCalendar().components([.Year, .Month, .Day], fromDate: date2) 

if components1.year == components2.year && components1.month == components2.month && components1.day == components2.day { 
    print("same date") 
} else { 
    print("different date") 
} 

Hoặc ngắn:

let diff = Calendar.current.dateComponents([.day], from: self, to: date) 
if diff.day == 0 { 
    print("same day") 
} else { 
    print("different day") 
} 
+0

làm tác phẩm này với các múi giờ khác nhau? – JoshJoshJosh

+2

Nếu múi giờ khác nhau, thay thế 'thành phần' bằng' componentsInTimeZone (_, fromDate: _) ' –

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