如何比较Swift 3.2中的两个日期?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何比较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而不是本地时间,因此您需要将GMT TimeZone(secondsFromGMT: 0)的dateFormatter时区设置为零秒。第二个问题是你在分钟"HH:mm"使用的是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用于数月而非分钟

另一答案

在操场上试过你的代码:

let date1 = "12/12/2017 23:12"  //Date you are passing 
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd-MM-yyyy HH:MM"
let date = dateFormatter.date(from: date1)

let todayDate = Date()

if Calendar.current.isDate((date)!, inSameDayAs:todayDate) == true {
    print("Both dates are same")
} else {
    print("Both dates are not same")
}

这将打印正确的Both dates are not same

但如果你用let date1 = "12/12/2017 23:12"替换let date1 = "29/12/2017 23:12"然后它将打印Both dates are same

另一答案

据我所知,您希望从格式中排除小时和分钟。请尝试以下代码:

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

dateFormatter.string(from: date)

这输出截至今天的“12/29/17”。您可以通过这种方式获得没有时间的日期:分钟,然后进行比较。

以上是关于如何比较Swift 3.2中的两个日期?的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 可选日期比较

如何比较Swift中的两个词典?

swift中的日期格式错误

如何比较Java中的两个字符串日期?

C#代码中如何比较两个日期的大小?

如何将这个 Objective-C 代码片段写入 Swift?