将当前系统日期与swift中的另一个日期(以字符串格式2019-11-22)进行比较



我从API(2019-11-22(获取日期作为一种字符串格式,我想将此日期与当前日期进行比较。

我尝试将当前日期转换为字符串格式,这是成功的,但这不能满足要求。我必须将字符串(2019-11-22(转换为日期,然后我才能比较两个日期。

我如何将字符串(2019-11-22(转换为日期以与系统日期进行比较请帮助我掌握日期方面的知识。提前谢谢。

extension Date {
static func getCurrentDate() -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
return dateFormatter.string(from: Date())
}

}

if Date() < apiEach["ExpiryDate"]! as! Date{
//apiEach["ExpiryDate"]! is 2019-11-22
pritn("You can proceed it's not outdated")
}

apiEach["ExpiryDate"]是一个字符串(apiEach["ExpiryDate"] as! Date将崩溃(,因此您有两个选项:

  1. 将当前日期转换为字符串

    if Date.getCurrentDate() < apiEach["ExpiryDate"] as! String { ...
    
  2. 将API字符串转换为Date,并比较

    let dateFormatter = DateFormatter()
    dateFormatter.locale = Locale(identifier: "en_US_POSIX")
    dateFormatter.dateFormat = "yyyy-MM-dd"
    if let apiDate = dateFormatter.date(from: apiEach["ExpiryDate"] as! String),
    Date() < apiDate { ...
    
func minimumDate(result:String) -> Bool {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let myDate = dateFormatter.date(from: "(result)")
dateFormatter.dateFormat = "yyyy-MM-dd"

let now = Date()
let startDateComparisionResult:ComparisonResult = now.compare(myDate!)
if startDateComparisionResult == ComparisonResult.orderedAscending {
print("Current date is smaller than end date.")
let somedateString = dateFormatter.string(from: myDate!)
print(somedateString)
return true
}
else if startDateComparisionResult == ComparisonResult.orderedDescending {
// Current date is greater than end date.
print("Current date is greater than end date.")
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let date1String = dateFormatter.string(from: myDate!)
let date2String = dateFormatter.string(from: now)
if date1String == date2String {
print("Equal date")
return true
}
return false
}
else if startDateComparisionResult == ComparisonResult.orderedSame {
// Current date and end date are same
print("Current date and end date are same")
return true
}
return true
}

由于日期格式"yyyy-MM-dd"可以正确排序/比较,您可以将当前日期转换为字符串,并将其与API值进行比较

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let now = dateFormatter.string(from: Date())
switch now.compare(input) { //input is from API
case .orderedSame:
print("Same")
case .orderedAscending:
print("Before")
case .orderedDescending:
print("After")
}

如果您想比较日期,Date()也将包括当前时间是很重要的,而使用仅日期格式的日期格式化程序转换的日期将其时间清零(午夜(,因此如果日期部分相同,则比较可能不正确。要处理此问题,最好使用DateComponents

let calendar = Calendar.current
guard let date = dateFormatter.date(from: input) else { return //or error }
let components = calendar.dateComponents([.year, .month, .day], from: now, to: date)
if let year = components.year, let month = components.month, let day = components.day {
switch (year + month + day) {
case 0:  // all values are zero
print("Same")
case ..<0 : // values will be zero or negative so sum is negative
print("After")
default:  // values will be zero or positive so sum is positive
print("Before")
}
}

最新更新