Swift 4比较日期

时间:2018-06-29 12:42:39

标签: ios swift

在Swift中比较日期确实非常简单,并且很容易理解。 可以单行编写,例如

if date1 > date2
  

但是我想检查Date1是否正好是3年或(X)   小于或大于Date2年。

如何使用swift完成它?

6 个答案:

答案 0 :(得分:6)

您可以尝试

 let components = Calendar.current.dateComponents([.year], from: Date(), to: secondDate)
 print(components.year)

答案 1 :(得分:3)

这应该满足您的要求:

func dateIsNYearsBeforeDate(date1: Date, date2: Date, nYears: Int) -> Bool {
    let calendar = Calendar.current

    // Extract the components of the dates
    let date1Components = calendar.dateComponents([.year, .month, .day, .hour, .minute, .second], from: date1)
    let date2Components = calendar.dateComponents([.year, .month, .day, .hour, .minute, .second], from: date2)

    // Check if the dates are in the same month and day
    let isSameMonth = date1Components.month == date2Components.month
    let isSameDay = date1Components.day == date2Components.day

    // Skip this if you want to check only the date and not the time
    let isSameHour = date1Components.hour == date2Components.hour
    let isSameMinute = date1Components.minute == date2Components.minute
    let isSameSecond = date1Components.second == date2Components.second

    let yearsDifference = date2Components.year! - date1Components.year!

    return isSameMonth && isSameDay && isSameHour && isSameMinute && isSameSecond && yearsDifference == nYears
}

答案 2 :(得分:1)

这里是检查2个日期是否大于X年的代码。希望这些评论将帮助您理解该过程。了解逻辑并对其进行修改以适合您的需求。

func isPastXYears(_ numberOfYears : Int) -> Bool{

    let formatter = DateFormatter()
    formatter.dateFormat = "yyyy/MM/dd"

    //Determine PastDate and NowDate
    guard let pastDate = formatter.date(from: "2015/06/28") else { return false}
    let nowDate = Date()

    //Convert the dates to TimeInterval for comparing
    let pastDateTimeInterval = pastDate.timeIntervalSinceNow
    let nowDateTimeInterval = nowDate.timeIntervalSinceNow

    //Get the TimeInterval of X years
    let xYearsTimeInterval : TimeInterval = 60 * 60 * 24 * 365 * Double(numberOfYears) // seconds * minutes * hoursInADay * numberOfDaysInAYear * numberOfYears

    //Get the difference of the dates' timeinterval
    let timeIntervalDifference = nowDateTimeInterval - pastDateTimeInterval

    //Check if difference is > xYearsInterval
    return (timeIntervalDifference >= xYearsTimeInterval)
}

isPastXYears(3) //true
isPastXYears(4) //false

答案 3 :(得分:1)

Swift 5.0 中,您可以比较符合DateEquatable的{​​{1}}结构。这意味着您可以执行以下操作:

Comparable

并像这样检查它:

let now = Date()
let theFuture = Date().addingTimeInterval(100)

Reference

答案 4 :(得分:0)

这甚至很简单,只需查看下面的代码段

   let monthsToAdd = 2
    let daysToAdd = 1
    let yearsToAdd = 1
    let currentDate = Date()

    var dateComponent = DateComponents()

    dateComponent.month = monthsToAdd
    dateComponent.day = daysToAdd
    dateComponent.year = yearsToAdd

    let futureDate = Calendar.current.date(byAdding: dateComponent, to: currentDate)

    print(currentDate)
    print(futureDate!)

答案 5 :(得分:0)

我可能会做这样的事情:

let date1 = Date()
let date2 = Date()

let dateMinus3Years = Calendar.current.date(byAdding: .year, value: -3, to: date1)!
let datePlus3Years = Calendar.current.date(byAdding: .year, value: 3, to: date1)!
let condition = Calendar.current.isDate(date2, inSameDayAs: dateMinus3Years)
   || Calendar.current.isDate(date2, inSameDayAs: datePlus3Years)

let date1 = Date()
let date2 = Date()

let date1Components = Calendar.current.dateComponents([.year, .month, .day], from: date1)
let date2Components = Calendar.current.dateComponents([.year, .month, .day], from: date2)

let condition = abs(date1Components.year! - date2Components.year!) == 3
    && date1Components.month == date2Components.month
    && date1Components.day == date2Components.day

这比使用时差更为安全。