2011-11-08 6 views
2

Je construis un nouveau système chronométrique pour mon entreprise, et je suis un peu de difficulté à trouver comment ajouter des différences de temps entre tous les horodateurs à une date donnée ...Décalage horaire entre le temps multidisque Timbres

ici a mon avis ....

<% @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 %> 

qui produit cette ...

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 ce que je voudrais est de pouvoir compter le temps pour chaque jour, et un total pour tous . Je sais comment obtenir le décalage horaire entre deux fois, mais je n'arrive pas à comprendre la différence de temps entre une série de fois tout au long de la journée ....

J'ai cherché sur Internet un exemple de ce que Je suis en train d'accomplir, et suis venu vide ... Toutes les idées seraient grandement appréciés ....

... Merci

EDIT)

Voici mon code de contrôleur avec une partie de la solution mise en œuvre, et cela me donne un total, cependant, je ne peux pas le faire tous les jours à cause de la façon dont j'utilise un hash ordonné. ..

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 
+0

Je suis un peu confus par vos données. On dirait que quelqu'un a donné un coup de poing dimanche à 12h15 et n'a pas donné de coup de poing avant mardi à 11h10. C'est un assez long changement. –

+0

je suppose que ce serait lol, mais ce n'est que des données d'échantillon, et je n'ai pas écrit de validations pour attraper de telles choses encore ... J'essaie juste d'assembler les écrous et les boulons maintenant .... –

+0

Donc les vraies données devraient a toujours l'air de '[punch-in, punch-out, punch-in, punch-out, ...]' alors? –

Répondre

3

Dans une série d'objets dans punches et qu'ils viennent en paires avec le premier étant un poinçon et le second étant un punch-out alors quelque chose comme cela vous donnera les durées:

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

le tableau in_out_lengths aura le laps de temps pour chaque paire punch-in/punch-out et total Total du temps pour le jour. Vous pouvez également utiliser first et last si vous pensez que l'indexation numérique semble laid:

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

Le seul truc utilise each_slice pour couper dans/sur le tableau de la journée dans les paires souhaitées. Une fois que vous avez cela en place, le map et inject sont assez simple. Tout ceci suppose, bien entendu, que punches est correctement configuré et validé.

+0

Ceci est me rapprochant un peu ... Je suis confronté à quelques problèmes de calllings lors de mon "day of punchs" parce que je l'obtiens en fait à partir d'un hash ordonné ... Je peux facilement obtenir le total avec ce tho , donc je peux voir un peu de lumière .. J'ajoute mon contrôleur src en haut ici pour que vous puissiez voir comment mes tableaux sont disposés .... –

+0

@Chase: Donc, vous avez tout réglé? Désolé, je commence juste ma journée ici. –

+0

Je suis un moyen de tout avoir triés, mais cela m'a fait courir ... Maintenant, juste besoin d'écrire des validations et refactoriser tout ... Merci beaucoup, a appris une tonne de cette petite entreprise! –

Questions connexes