来自字符串的日期不正确并且两个日期差异也使用 Swift 3?

Date from string is not coming properly and two dates difference also using Swift 3?

我有一个字符串格式的日期,例如:-“2017-07-31”或者可以是字符串格式的多个日期(任意)。我的要求是检查这个日期到当前日期,如果它大于0小于15,那么到时候我必须再做一次操作。

所以首先我将该日期字符串转换为日期格式。但它给出了一天前的日期。这是我的代码:

//Date from string
func dateFromString(date : String) -> Date {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd"
    let currentDate = (dateFormatter.date(from: date))//(from: date))
    return currentDate!
}

例如。我的日期是“2017-08-30”,此函数以日期格式返回 2017-08-29 18:30:00 +0000。这意味着 1 天前。我对日期操作有点困惑。我也读了很多博客。

之后我必须将这个日期检查为当前日期,如果它在 0 < 15 之间,我将进行其他操作。

比较两个日期:

extension Date {
  func daysBetweenDate(toDate: Date) -> Int {
    let components = Calendar.current.dateComponents([.day], from: self, to: toDate)
    return components.day ?? 0
  }
}

如果我的日期是今天的日期并且与明天的日期进行比较,那么它也会给出 0 天的差异。为什么?

尝试使用此方法将字符串转换为日期:

func dateFromString(date : String) -> Date {
  let dateFormatter = DateFormatter()
  dateFormatter.dateFormat = "yyyy-MM-dd"
  dateFormatter.timeZone = TimeZone.init(abbreviation: "UTC")
  let currentDate = (dateFormatter.date(from: date))//(from: date))
  return currentDate!
}

试试这个以秒为单位比较两个日期之间的时间:

  var seconds = Calendar.current.dateComponents([.second], from: date1!, to: date2!).second ?? 0

    seconds = abs(seconds)

    let min  = seconds/60     // this gives you the number of minutes between two dates
    let hours = seconds/3600  // this gives you the number of hours between two dates
    let days = seconds/3600*24  // this gives you the number of days between two dates

如果 - 例如 - 当前日期是 2017 年 7 月 31 日上午 11 点,那么 与 2017-08-01(午夜)的区别是 0 天 13 小时,那就是 为什么结果是“0 天差异”。

您可能想要比较 start 之间的区别 当天和其他日期的天数:

extension Date {
    func daysBetween(toDate: Date) -> Int {
        let cal = Calendar.current
        let startOfToday = cal.startOfDay(for: self)
        let startOfOtherDay = cal.startOfDay(for: toDate)
        return cal.dateComponents([.day], from: startOfToday, to: startOfOtherDay).day!
    }
}