在Swift中比较日期确实非常简单,并且很容易理解。 可以单行编写,例如
if date1 > date2
但是我想检查Date1是否正好是3年或(X) 小于或大于Date2年。
如何使用swift完成它?
答案 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 中,您可以比较符合Date
和Equatable
的{{1}}结构。这意味着您可以执行以下操作:
Comparable
并像这样检查它:
let now = Date()
let theFuture = Date().addingTimeInterval(100)
答案 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
这比使用时差更为安全。