如何对 swift 中的数组日期进行排序 4
How to sort an array dates in swift 4
我有一组这样的日期:-
var dateArray = ["2016-04-20", "2016-04-22", "2016-04-25", "2016-04-30"]
我想找出它们之间的天数差异。我做了一些研究,我只能用两个日期来做到这一点,这是我找到两个日期之间差异的方法
let dateFormatter = DateFormatter()
let isoDate = "2016-04-20"
let calendar = NSCalendar.current
let currentDate = Date()
在我的 viewDidLoad 方法中,我这样做了
override func viewDidLoad() {
super.viewDidLoad()
// let components = calendar.dateComponents([.day], from: )
dateFormatter.dateFormat = "yyyy-MM-dd"
dateFormatter.locale = Locale(identifier: "en_US_POSIX") //en_US_POSIX
let formatedStartDate = dateFormatter.date(from: isoDate)
let date = dateArray.compactMap { dateFormatter.date(from: [=13=]) } // for date array
print(date)
let components = Set<Calendar.Component>([.day])
let differenceOfDate = Calendar.current.dateComponents(components, from: formatedStartDate!, to: currentDate )
print (differenceOfDate)
apiData()
}
正如您在代码中看到的那样,我创建了一个常量 let isoDate = "2016-04-20" 并更改为 formatedStartDate并找到从这个日期到当前日期之间的差异,然后它就起作用了。但是,如果我有自己的日期数组怎么办?如何找到我自己的日期数组的差异并将其排序为升序或降序。请帮忙?
创建日期格式化程序
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
dateFormatter.locale = Locale(identifier: "en_US_POSIX") //en_US_POSIX
将日期字符串数组映射到 Date
个实例
let dateStringArray = ["2016-04-20", "2016-04-22", "2016-04-25", "2016-04-30"]
let dateArray = dateStringArray.map {dateFormatter.date(from: [=11=])!} // add .sorted() if the array is unordered.
在循环中获取相邻项之间的差异
var differences = [Int]()
for i in 0..<dateArray.count - 1 {
let dayComponent = Calendar.current.dateComponents([.day], from: dateArray[i], to: dateArray[i+1])
differences.append(dayComponent.day!)
}
print(differences)
我不确定您是只想比较相邻的日期还是比较每个日期。在第一种情况下,使用 vadian
s 解决方案。在另一种情况下,您可以这样做:
let dateStrings = ["2016-04-20", "2016-04-22", "2016-04-25", "2016-04-30"]
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
let dates = dateStrings.compactMap { dateFormatter.date(from: [=10=]) }
let calendar = Calendar.current
var differences: [Int] = []
for i in 0..<dates.count {
for j in i + 1..<dates.count {
if let difference = calendar.dateComponents([.day], from: dates[i], to: dates[j]).day {
differences.append(difference)
}
}
}
let descendingDifferences = differences.sorted(by: >)
print(descendingDifferences) // results in [10, 8, 5, 5, 3, 2]
我有一组这样的日期:-
var dateArray = ["2016-04-20", "2016-04-22", "2016-04-25", "2016-04-30"]
我想找出它们之间的天数差异。我做了一些研究,我只能用两个日期来做到这一点,这是我找到两个日期之间差异的方法
let dateFormatter = DateFormatter()
let isoDate = "2016-04-20"
let calendar = NSCalendar.current
let currentDate = Date()
在我的 viewDidLoad 方法中,我这样做了
override func viewDidLoad() {
super.viewDidLoad()
// let components = calendar.dateComponents([.day], from: )
dateFormatter.dateFormat = "yyyy-MM-dd"
dateFormatter.locale = Locale(identifier: "en_US_POSIX") //en_US_POSIX
let formatedStartDate = dateFormatter.date(from: isoDate)
let date = dateArray.compactMap { dateFormatter.date(from: [=13=]) } // for date array
print(date)
let components = Set<Calendar.Component>([.day])
let differenceOfDate = Calendar.current.dateComponents(components, from: formatedStartDate!, to: currentDate )
print (differenceOfDate)
apiData()
}
正如您在代码中看到的那样,我创建了一个常量 let isoDate = "2016-04-20" 并更改为 formatedStartDate并找到从这个日期到当前日期之间的差异,然后它就起作用了。但是,如果我有自己的日期数组怎么办?如何找到我自己的日期数组的差异并将其排序为升序或降序。请帮忙?
创建日期格式化程序
let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd" dateFormatter.locale = Locale(identifier: "en_US_POSIX") //en_US_POSIX
将日期字符串数组映射到
Date
个实例let dateStringArray = ["2016-04-20", "2016-04-22", "2016-04-25", "2016-04-30"] let dateArray = dateStringArray.map {dateFormatter.date(from: [=11=])!} // add .sorted() if the array is unordered.
在循环中获取相邻项之间的差异
var differences = [Int]() for i in 0..<dateArray.count - 1 { let dayComponent = Calendar.current.dateComponents([.day], from: dateArray[i], to: dateArray[i+1]) differences.append(dayComponent.day!) } print(differences)
我不确定您是只想比较相邻的日期还是比较每个日期。在第一种情况下,使用 vadian
s 解决方案。在另一种情况下,您可以这样做:
let dateStrings = ["2016-04-20", "2016-04-22", "2016-04-25", "2016-04-30"]
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
let dates = dateStrings.compactMap { dateFormatter.date(from: [=10=]) }
let calendar = Calendar.current
var differences: [Int] = []
for i in 0..<dates.count {
for j in i + 1..<dates.count {
if let difference = calendar.dateComponents([.day], from: dates[i], to: dates[j]).day {
differences.append(difference)
}
}
}
let descendingDifferences = differences.sorted(by: >)
print(descendingDifferences) // results in [10, 8, 5, 5, 3, 2]