【问题标题】:How to sort an array dates in swift 4如何在swift 4中对数组日期进行排序
【发布时间】:2018-06-16 17:16:17
【问题描述】:

我有一个这样的日期数组:-

  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: $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()
}

正如您在代码中看到的,我创建了一个常量 let isoDate = "2016-04-20" 并更改为 formatedStartDate 并找出这个日期之间的差异到当前日期然后它起作用了。但是,如果我有自己的日期数组,我怎样才能找到我自己的日期数组的差异并将其按升序或降序排序。请帮忙?

【问题讨论】:

    标签: ios swift swift4 nsdateformatter


    【解决方案1】:
    • 创建日期格式化程序

      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: $0)!} // 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)
      

    【讨论】:

    • 它有效,先生,但我想做更多的事情,我想按降序打印日期。我该怎么做?
    • print(Array(differences.reversed())) 或将.sorted(by: &gt;) 附加到dateStringArray 行并将[i][i+1] 交换
    【解决方案2】:

    我不确定您是只想比较彼此相邻的日期还是比较每个日期。在第一种情况下,使用vadians 解决方案。在另一种情况下,您可以执行以下操作:

    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]
    

    【讨论】:

      猜你喜欢
      • 2019-11-01
      • 2021-02-23
      • 2018-11-24
      • 1970-01-01
      • 2021-08-04
      • 2023-04-06
      • 2017-03-20
      • 2023-03-04
      相关资源
      最近更新 更多