簡體   English   中英

如何在 Swift 3.2 中比較兩個日期?

[英]How can I compare two dates in Swift 3.2?

我正在嘗試比較兩個日期。 一個日期來自服務器,另一個是今天的日期。

for i in 0...self.totalDaysFromServerArray.count-1 {
    let selectedDate = self.totalDaysFromServerArray[i] //selectedDate: "12/12/2017 23:12"

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "dd-MM-yyyy HH:MM"
    let date = dateFormatter.date(from: }selectedDate)
}

if Calendar.current.isDate((date)!, inSameDayAs:todayDate as Date) == true {

}

打印日期的描述:

▿ Optional<Date>
  ▿ some : 2017-12-29 17:30:00

  let todayDate = Date() 
//Printing description of todayDate:
▿ 2017-12-29 11:50:45 

如果兩個日期相同,我最終必須在 if 條件中執行一些操作。
但是該循環永遠不會執行,即使兩者是相同的日期。 有什么建議?

問題是您沒有正確解釋時區。 來自服務器的日期字符串可能是 UTC 而不是本地時間,因此您需要將 dateFormatter 時區從 GMT TimeZone(secondsFromGMT: 0)設置為零秒。 第二個問題是您使用的是 MM,它是在分鍾"HH:mm"中的月份。 第三個問題是您還忘記使用"/"而不是"-"作為分隔符,日期字符串的正確固定日期格式應該是"dd/MM/yyyy HH:mm" 第四,在解析固定日期格式時,您需要將 dateFormatter 語言環境設置為"en_US_POSIX" 它是數組還是字典? 6 : "18/12/2017 23:12"看起來像一個[Int:String]字典。 您還需要在循環中移動 if 條件,並且上面的評論中沒有與今天匹配的日期,因此我將添加一個匹配的日期僅用於演示目的。

let totalDaysFromServerArray = ["18/12/2017 23:12", "19/12/2017 23:12", "20/12/2017 23:12", "21/12/2017 23:12", "29/12/2017 23:12"]
for dateString in totalDaysFromServerArray {
    print("server:", dateString) 
    let dateFormatter = DateFormatter()
    dateFormatter.locale = Locale(identifier: "en_US_POSIX")
    dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
    dateFormatter.dateFormat = "dd/MM/yyyy HH:mm"
    if let date = dateFormatter.date(from: dateString) {
        print("parsed:", dateFormatter.string(from: date))
        print("match:", dateString == dateFormatter.string(from: date))
        if Calendar.current.isDate(date, inSameDayAs: Date()) {
            print("inSameDayAsToday:", true)
        }
    }
}

用:

dateFormatter.dateFormat = "dd-MM-yyyy HH:mm"

大寫 M 用於數月而不是數分鍾

據我了解,您想從格式中排除小時和分鍾。 試試下面的代碼:

dateFormatter.timeStyle = DateFormatter.Style.none
dateFormatter.dateStyle = DateFormatter.Style.short

dateFormatter.string(from: date)

截至今天,這會輸出“12/29/17”。 您可以通過這種方式獲取沒有小時:分鍾的日期,然后進行比較。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM