2015-09-30 193 views
11

我有這樣的代碼,其中將一個字符串轉換日期對象檢查日期落在2日期間

let date2 = KeysData[indexPath.row]["starttime"] as? String 

let dateFormatter = NSDateFormatter() 
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ" 

if let date = dateFormatter.dateFromString(date2!) { 
    println(date)   
} 

我想知道如果當前日期落在2天,我的陣列中得到startdate之間endate

回答

39

您已有用於將日期字符串在KeysData轉換爲NSDate的代碼。假設你有兩個日期在startdateenddate,所有你所要做的就是檢查當前日期之間:

let startdate = ... 
let enddate = ... 

NSDate().isBetweeen(date: startdate, andDate: enddate) 

extension NSDate { 
    func isBetweeen(date date1: NSDate, andDate date2: NSDate) -> Bool { 
     return date1.compare(self) == self.compare(date2) 
    } 
} 

編輯:如果要執行包容範圍檢查,使用這個條件:

extension NSDate { 
    func isBetweeen(date date1: NSDate, andDate date2: NSDate) -> Bool { 
     return date1.compare(self).rawValue * self.compare(date2).rawValue >= 0 
    } 
} 
+0

這是一個不錯的「絕招」,但或許應該加上未包括此檢查「嚴格間」,即開始和結束日期(可能或不需要)。 –

+0

@MartinR好點。 –

+0

@NikolaiRuhe嘿,謝謝你的回答,但是你解決了Martin R的筆記嗎? 我也遇到了同樣的問題,開始日期和結束日期是相同的日期,所以當我按照你的答案,這個聲音並沒有返回true – Rawan

53

斯威夫特3使這容易很多。

let fallsBetween = (startDate ... endDate).contains(Date()) 

現在NSDate橋接到值類型DateDate符合Comparable我們就可以形成一個ClosedRange<Date>並使用contains方法,看是否包含在當前的日期。

警告:endDate必須大於或等於startDate。否則,範圍無法形成,代碼將崩潰fatalError

這是安全的:

extension Date { 
    func isBetween(_ date1: Date, and date2: Date) -> Bool { 
     return (min(date1, date2) ... max(date1, date2)).contains(self) 
    } 
} 
+1

可能是值得編輯你以前的接受了這個答案。這很棒! –

+0

請問您可以添加如何包含開始日期?由於某種原因,它不包括開始日期 – XcodeNOOB

+0

@XcodeNOOB:適用於我。 Swift的'ClosedRange'和'contains'語義意味着開始日期和結束日期都包含在內:'(startDate ... endDate).contains(startDate)== true'和'(startDate ... endDate).contains(endDate) == true'。 –

-1
extension Date { 

    func isBetweeen(date date1: Date, andDate date2: Date) -> Bool { 
     return date1.timeIntervalSince1970 < self.timeIntervalSince1970 && date2.timeIntervalSince1970 > self.timeIntervalSince1970 
    } 

} 
1
extension Date 
{ 
    func isBetween(startDate:Date, endDate:Date)->Bool 
    { 
     return (startDate.compare(self) == .orderedAscending) && (endDate.compare(self) == .orderedDescending) 
    } 
} 
相關問題