Разница во времени между марками времени массива - PullRequest
2 голосов
/ 08 ноября 2011

Я создаю новую систему часов для своей компании, и у меня возникают некоторые трудности с выяснением того, как добавить разницу во времени между всеми отметками времени на определенную дату ...

Вот мое мнение....

<% @punches_days.sort.each do |day, punches|%>

<h3><%= day.strftime('%A %D') %></h3>
<table>
  <tr>

    <th>Status</th>
    <th>Comment</th>
    <th>Time</th>
    <th></th>
    <th></th>
  </tr>

<% for punch in punches %>
  <tr>

    <td><%= punch.status %></td>
    <td><%= punch.comment %></td>
    <td><%= punch.created_at.in_time_zone(punch.user.time_zone)%></td>
    <td><%= link_to 'Show', punch %></td>
    <td><%= link_to 'Edit', edit_punch_path(punch) %></td>
    <td><%= link_to 'Destroy', punch, :confirm => 'Are you sure?', :method => :delete %></td>
  </tr>
<% end %>
</table>


<% end %>

Который производит это ...

  Sunday 11/06/11

Status  Comment Time        
In      2011-11-06 08:00:00 -0500   Show    Edit    Destroy
Lunch       2011-11-06 12:00:00 -0500   Show    Edit    Destroy
In      2011-11-06 13:00:00 -0500   Show    Edit    Destroy
Out     2011-11-06 16:00:00 -0500   Show    Edit    Destroy

 Tuesday 11/08/11

Status  Comment Time        
In      2011-11-08 08:00:00 -0500   Show    Edit    Destroy
Lunch       2011-11-08 12:15:00 -0500   Show    Edit    Destroy
In      2011-11-08 13:00:00 -0500   Show    Edit    Destroy
Out     2011-11-08 16:41:00 -0500   Show    Edit    Destroy

I Я хотел бы иметь возможность подсчитывать время для каждого дня, а затем общее для всех,Я знаю, как получить разницу во времени между двумя разами, но я не могу обернуть голову, получая разницу во времени между массивом раз в течение дня ...

Я очистил Интернет для примераиз того, что я пытаюсь достичь, и пусто ... Любые идеи будут высоко оценены ....

Спасибо ...

РЕДАКТИРОВАТЬ)

Вот мой код контроллера с частью реализованного решения, и это дает мне общее количество, однако я не могу делать это ежедневно из-за того, как я использую упорядоченный хэш ...

def timecard
       @punches = Punch.timecard(params[:user])
       @punches_days = @punches.group_by { |t| t.created_at.beginning_of_day}
       @in_out_lengths = @punches.each_slice(2).map { |a| a[1].created_at -            a[0].created_at }
       @total          = ((@in_out_lengths.inject(:+))/1.hour).round


    respond_to do |format|
      format.html # timecard.html.erb
      format.json { render :json => @punches }
    end
  end

1 Ответ

3 голосов
/ 09 ноября 2011

Учитывая массив объектов в punches и то, что они идут парами, первый из которых является врезкой, а второй - врезкой, тогда что-то вроде этого даст вам длительность:

in_out_lengths = punches.each_slice(2).map { |a| a[1].created_at - a[0].created_at }
total          = in_out_lengths.inject(:+)

Массив in_out_lengths будет иметь промежуток времени для каждой пары punch-in / punch-out, а total - общее время дня.Вы также можете использовать first и last, если считаете, что числовое индексирование выглядит некрасиво:

punches.each_slice(2).map { |a| a.last.created_at - a.first.created_at }

Единственный прием - использовать each_slice для нарезки входных / выходных данных дня.Массив в нужные пары.Как только вы это сделаете, map и inject довольно просты.Все это, конечно, предполагает, что punches правильно настроен и проверен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...