从数组中获取值并计算日期之间的差异

时间:2016-04-28 09:31:34

标签: ruby-on-rails ruby

我在对象@nearest_vacation中的end_at和start_at之间计算天数时出现问题。 对象@nearest_vacation的结构:

[#<Vacation id: 11, start_at: "2016-04-30", end_at: "2016-05-02", free: false, reason: "Rocznica", person_id: 1>]

当我尝试@nearest_vacation.map{|x| x.end_at}时,它会返回:[Mon, 02 May 2016] 这种日期格式不允许我这样做:(end_at - start_at).to_i。如何正确获取值end_at和start_at来计算日期之间的差异?

2 个答案:

答案 0 :(得分:2)

您可以使用mjd方法:

Date.parse("2016-05-02").mjd - Date.parse("2016-04-20").mjd
=> 12 #days

答案 1 :(得分:2)

您的问题是您有一个Vacations数组。

如果你真的需要一个阵列,没问题。

# notice the pluralised variable name
@nearest_vacations.map{|nv| (nv.end_at - nv.start_at)}

以上将返回一个日期不同的数组。

我怀疑这里发生的是你有阵列和实例混淆。这就是为什么您必须使用.map从假期数组中获取end_at值。

认为这里真正的问题是你的nearest_vacation是一个数组的原因。变量的名称及其未复数的事实告诉我,您不想要一个数组,而只需要一个实例。找到你的nearest_vacation变量被设置为数组的位置,修复它,然后你的代码应该可以工作。