代码之家  ›  专栏  ›  技术社区  ›  Wings

如何在swift 4中对数组日期进行排序

  •  1
  • Wings  · 技术社区  · 8 年前

    我有一系列这样的日期:

      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()
    

    在我的 视图加载 我这样做的方法

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

    正如您在代码中看到的,我创建了一个常量 让isodate=“2016-04-20” 变成 格式化开始日期 找出这个日期和当前日期之间的区别,然后它就开始工作了。但是,如果我有自己的日期数组,我如何才能找到自己的日期数组的差异,并按升序或降序排序呢?请帮忙?

    2 回复  |  直到 8 年前
        1
  •  3
  •   vadian    8 年前
    • 创建日期格式化程序

      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)
      
        2
  •  1
  •   André Slotta    8 年前

    我不确定你是只想比较彼此相邻的日期,还是比较每个日期。在第一种情况下 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: $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]
    
    推荐文章