Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> iOS

Cách so sánh 2 NSDate trong iPhone/iOS

Để so sánh 2 đối tượng Date (trước là NSDate) trong Swift, dùng phương thức compare(_:) trả về ComparisonResult.

Tạo 2 Date để so sánh


let calendar = Calendar.current

var comp1 = DateComponents()
comp1.day = 5; comp1.month = 6; comp1.year = 1993
let date1 = calendar.date(from: comp1)!  // 5/6/1993

var comp2 = DateComponents()
comp2.day = 4; comp2.month = 2; comp2.year = 1995
let date2 = calendar.date(from: comp2)!  // 4/2/1995

So sánh bằng compare(_:)


let result = date2.compare(date1)

switch result {
case .orderedAscending:
    print("date1 > date2 (date2 sớm hơn)")
case .orderedDescending:
    print("date1 < date2 (date2 muộn hơn)")
case .orderedSame:
    print("Hai date bằng nhau")
}

Kết quả

Cách so sánh 2 NSDate trong iPhone/iOS

3 giá trị ComparisonResult

  • .orderedAscending: left < right (left xảy ra trước/sớm hơn).
  • .orderedDescending: left > right (left xảy ra sau/muộn hơn).
  • .orderedSame: left == right (cùng thời điểm).

Cách tiện lợi hơn (Swift)


// So sánh trực tiếp với toán tử (Date conform Comparable)
if date1 < date2 { print("date1 sớm hơn date2") }
if date1 > date2 { print("date1 muộn hơn date2") }
if date1 == date2 { print("Cùng lúc") }

// Kiểm tra khoảng cách
let interval = date2.timeIntervalSince(date1)  // Giây
let days = interval / 86400

Lưu ý

  • Date trong Swift là struct (value type), NSDate là class (reference type) – bridged tự động.
  • So sánh Date bao gồm cả giờ/phút/giây. Nếu chỉ so sánh ngày, hãy normalize về 00:00:00 dùng Calendar.current.startOfDay(for:).
  • timeIntervalSinceReferenceDate hoặc timeIntervalSince1970 cho timestamp Unix.