我有一组日期。我需要将它们的亲密度排序到某些test_date。数组中的日期可以是之前的或之后即test_date。Ruby:按日期排列日期
我的简单的红宝石程序没有得到它的权利。我的策略是将每个Date
转换为unix时间戳。然后我通过日期和test_date之间的差异的绝对值进行自定义排序。
下面是程序:
require 'date'
test_date = DateTime.new(2017,2,3,4,5,6)
date1 = Date.new(2017,1,6)
date2 = Date.new(2017,1,5)
date3 = Date.new(2017,2,5)
date4 = Date.new(2017,2,6)
date5 = Date.new(2017,2,9)
date6 = Date.new(2017,2,1)
date7 = Date.new(2017,2,2)
dates_ary = date1, date2, date3, date4, date5, date6, date7
sorted_dates = dates_ary.sort do |d1, d2|
if((d1.to_time.to_i - test_date.to_time.to_i).abs <= (d2.to_time.to_i - test_date.to_time.to_i).abs)
d1 <=> d2
else
d2 <=> d1
end
end
puts "expected order: "
puts "2017-02-02"
# pointed out in comments that 2017-02-05 will be closer than 2017-02-01 due to test_date having present hours, minutes, and seconds.
puts "2017-02-05"
puts "2017-02-01"
puts "2017-02-06"
puts "2017-02-09"
puts "2017-01-06"
puts "2017-01-05"
puts ''
puts 'actual order:'
sorted_dates.each {|d| puts d}
另外:如果是通过他们的亲近另一个日期排序日期一些现有的红宝石或轨道的方法,让我知道。谢谢!
你为什么想到'date6'来之前'date3'?你确定要比较'日期'和'日期时间'吗? –
我正在将此应用于rails项目,其中'test_date'表示'created_at'是DateTime类型,以及其他一些属性是Date类型。 – Neil
但是为什么'2017-02-01'会在'2017-02-05'之前?你的意思是比较'日期'和'日期时间'的日期组件? –