2

我有一个名为 WorkInterval 的模型,它的记录基本上包含:

start_date, end_date

我希望能够获得特定任务的所有 WorkIntervals(我知道如何处理关联)并获得花费的总时间。因此,对所有实例的 end_date 和 start_date (end_date - start_date)之间的所有差异进行聚合(添加)。

现在我能够做到这一点:

@task.work_intervals-> 这给了我所有的work_intervals,但是我怎样才能以干净的红宝石方式获得花费在该任务上的时间总和?

注意:
1 - end_date 和 start_date 都是DateTime
2 - 某些实例的 end_date 可能为 NIL,如果是这种情况,则应采用当前日期时间。

4

2 回答 2

0
@task.work_intervals
.map {|i| (i.end_date || Time.now).to_time - i.start_date.to_time }
.reduce(:+)
# => total in seconds
于 2013-04-11T17:33:29.710 回答
-1

这是一个提示,在您的任务模型中定义如下函数:

def total_time_in_hours
 _total_time = 0
 self.work_intervals.each do |work_interval|
  _start_date = work_interval.start_date
  _end_date = work_interval.end_date
  _end_date = Time.now unless _end_date.blank?
  _total_time += ((_end_date - _start_date)/1.hour).round
 end
 _total_time
end

现在像这样访问总时间@any_task.total_time_in_hours......希望有帮助...... :)

[更新]

忽略这个答案,我犯了一些错误...... :(

我的测试是在 posgresql 中使用我的数据库的实际记录完成的,表列最初是作为日期时间创建的,但是当我在 Rails 中检索记录时,我不知道是否发生了变化......

1.8.7-p371 :001 > @init_date = MaterialReservacion.first.hora_limite

  => Thu, 11 Apr 2013 19:09:14 CDT -05:00

1.8.7-p371 :002 > @end_date = Time.now

  => Fri Apr 12 09:33:34 -0500 2013 

1.8.7-p371 :003 > ((@end_date-@init_date)/1.hour).round
  => 14 
于 2013-04-11T19:04:32.897 回答