如何在Ruby(而不是Rails)中排序日期?

时间:2012-05-25 14:25:54

标签: ruby

我知道Rails在ActiveRecord中内置了排序方法,但我只是编写一个普通的ruby脚本,并希望按日期对数组中的记录进行排序。

日期将存储在多维数组的一个单元格中。

对我来说,最好的方法是什么,所以我可以达到sort_by_date的标准,并指出ASCDESC

我不必使用方法sort_by_date,但我的想法是,我希望能够轻松调用集合上的方法并获得我想要的结果。

思想?

5 个答案:

答案 0 :(得分:12)

def sort_by_date(dates, direction="ASC")
  sorted = dates.sort
  sorted.reverse! if direction == "DESC"
  sorted
end

答案 1 :(得分:10)

这样的东西?

  class Array
    def sort_by_date(direction="ASC")
      if direction == "ASC"
        self.sort
      elsif direction == "DESC"
        self.sort {|a,b| b <=> a}
      else
        raise "Invalid direction. Specify either ASC or DESC."    
      end
    end
  end

多维数组只是一个数组数组,因此请在要排序的“维度”上调用此方法。

答案 2 :(得分:3)

我现在这样做的方式是:

@collection.sort! { |a,b|  DateTime.parse(a['date']) <=> DateTime.parse(b['date']) }

随着!运算符我正在影响同一个变量(否则我需要另一个来保存修改后的变量)。到目前为止,它是一种魅力。

答案 3 :(得分:2)

以下内容可能不适用于Date对象,但应适用于DateTime对象。这是因为DateTime对象可以转换为整数。

我最近不得不对DateTime对象进行降序排序,这就是我想出来的。

def sort_by_datetime(dates, direction="ASC")
  dates.sort_by { |date| direction == "DESC" ? -date.to_i : date }
end

答案 4 :(得分:0)

我正在使用旧版本的Rails和rabl,它对我有用

collection @name_of_your_collection.sort! { |a,b|  DateTime.parse(a['start_at']) <=> DateTime.parse(b['start_at']) }
node do |s|
 # lots of attributes
  s
end