[英]How to sort an array dates in swift 4
I have an array of dates like this :- 我有这样的日期数组:-
var dateArray = ["2016-04-20", "2016-04-22", "2016-04-25", "2016-04-30"]
and I want to find out the difference of days between them. 我想找出两者之间的天数差异。 I do some research and i am able to do that with only two dates here is the approach i did in finding the difference between two date
我做了一些研究,我只用两个约会就可以做到这一点,这是我发现两个约会之间的区别的方法
let dateFormatter = DateFormatter()
let isoDate = "2016-04-20"
let calendar = NSCalendar.current
let currentDate = Date()
And in my viewDidLoad method I did this 在我的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: $0) } // for date array
print(date)
let components = Set<Calendar.Component>([.day])
let differenceOfDate = Calendar.current.dateComponents(components, from: formatedStartDate!, to: currentDate )
print (differenceOfDate)
apiData()
}
As you can see in the code i created a constant let isoDate = "2016-04-20" and changed into formatedStartDate and find the difference between form this date to current date then it worked. 如您在代码中看到的,我创建了一个常量let isoDate =“ 2016-04-20”并更改为formattedStartDate,并找到此日期与当前日期之间的差异,然后它起作用了。 But what if I have my own array of dates and how can i find the difference of my own array of dates and sort it into increasing or decreasing order.
但是,如果我有自己的日期数组,又怎么能找到自己的日期数组的差异并将其按升序或降序排序呢? Please help?
请帮忙?
Create the date formatter 创建日期格式
let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd" dateFormatter.locale = Locale(identifier: "en_US_POSIX") //en_US_POSIX
Map the date string array to Date
instances 将日期字符串数组映射到
Date
实例
let dateStringArray = ["2016-04-20", "2016-04-22", "2016-04-25", "2016-04-30"] let dateArray = dateStringArray.map {dateFormatter.date(from: $0)!} // add .sorted() if the array is unordered.
In a loop get the differences between adjacent items 循环获得相邻项目之间的差异
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)
I'm not sure if you only want to compare the dates next to each other or compare each and every date. 我不确定您是否只想比较相邻的日期或比较每个日期。 In the first case go with
vadian
s solution. 在第一种情况下,请使用
vadian
的解决方案。 In the other case you can do something like this: 在其他情况下,您可以执行以下操作:
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: $0) }
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]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.