如何比较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条件中执行一些执行。
但是,即使两者都是相同的日期,该循环也永远不会执行。有任何建议吗?

问题是您无法正确解释时区。服务器的日期字符串可能不是本地时间,因此您需要将GMT TimeZone(secondsFromGMT: 0)的dateformatter时区设置为零秒。第二个问题是您使用的是MM,该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"。您可以在没有数小时的时间内获得日期:以这种方式进行比较。

相关内容

  • 没有找到相关文章

最新更新