从Ruby数组中的哈希中提取日期值

时间:2013-12-30 20:23:14

标签: ruby-on-rails ruby arrays datetime hash

我有一个包含一系列哈希的数组,如下所示。

[{:pgs=>6, :oo=>"No", :ms_no=>"D3273", :auth=>"Johnson", :ms_recd=>"Mar 14", :ready_for_ce=>"Mar 15", :proj_back_from_ce=>"Apr 1", :final_ok=>"Jul 25", :pub_date=>"Aug 5", :notes=>" "}, 
{:pgs=>17, :oo=>"No", :ms_no=>"R4382", :auth=>"Jacobs", :ms_recd=>"Apr 12", :ready_for_ce=>"Apr 16", :proj_back_from_ce=>"May 17", :final_ok=>"Jul 10", :pub_date=>"June 10 ", :notes=>" "},
{:pgs=>15, :oo=>"No",  :ms_no=>"L3291", :auth=>"Smith", :ms_recd=>"Mar 25", :ready_for_ce=>"Mar 26", :proj_back_from_ce=>"Apr 22", :final_ok=>"Jun 21", :pub_date=>"Aug 10 ", :notes=>"Au prompted for cx 4/30", nil=>" 5/15."}]

我需要在每个哈希值中取两个日期值:一个键为:ms_recd,另一个键为:pub_date。然后,我将确定两个日期范围之间的天数(例如,18天)。

幸运的是,我最后一部分已经弄明白了。我只需要做

ms_recd1 = DateTime.parse('Apr 24')
pub_date1 = DateTime.parse('Aug 15')
(pub_date1 - ms_recd1).to_i 

返回115(表示115天)。所以让我们说三个哈希值,我会提取115天,162天和94天的日期范围,然后我将它平均为123.6天。

我的问题是,如何从这个数组中提取这些日期值来执行此操作?我觉得这应该很简单,但我无法弄清楚它应该如何运作。

1 个答案:

答案 0 :(得分:2)

  

我的问题是,如何从这个数组中提取这些日期值来执行此操作?

你可以写这些日期:

 array.map{|h| h.values_at(:ms_recd,:pub_date)}

@robertodecurnex 评论的完整解决方案:

 array.map{|h| (DateTime.parse(h[:pub_date]) - DateTime.parse(h[:ms_recd])).to_i}