我从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
将崩溃(,因此您有两个选项:
-
将当前日期转换为字符串
if Date.getCurrentDate() < apiEach["ExpiryDate"] as! String { ...
-
将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")
}
}