按年份比较 Swift 日期



在 Swift 中比较日期非常简单易懂。 它可以写在一行中,例如:

if date1 > date2

但是,如果我想检查 Date1 是比 Date2 小 3 年还是大3 年怎么办?

尝试使用 DateComponents:

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

这应该按照您的要求进行操作:

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 个日期是否大于 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

Swift 5.0中,您可以比较符合EquatableComparableDate结构。这意味着您可以执行以下操作:

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

并像这样检查:

now == theFuture
now != theFuture
now < theFuture
now > theFuture

参考

使用 DateComponents,如下面的代码片段所示:

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!)

我可能会做这样的事情:

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

这将比使用时差更安全。

最新更新