Ruby on rails DateTime.now在设置变量(Rails)时延迟
我已经创建了一个应用程序,它具有计时器功能,您可以在其中启动、暂停/恢复和完成。我已将_链接到设置启动、上次暂停、上次恢复和完成时间的按钮 问题是,当我发送一个获取DateTime的调用时。例如,现在当用户单击“暂停”时,它获取DateTime。现在,当页面最初加载时,而不是当用户实际单击链接时。理想情况下,有一个解决方案可以在单击时获取实际的系统时间。一种可能的破解方法是每x秒/分钟重新加载一次页面,以确保时间在某种程度上得到准确反映,但这似乎不是很干净 要暂停的代码(paused_at是一个datetime变量)Ruby on rails DateTime.now在设置变量(Rails)时延迟,ruby-on-rails,datetime,Ruby On Rails,Datetime,我已经创建了一个应用程序,它具有计时器功能,您可以在其中启动、暂停/恢复和完成。我已将_链接到设置启动、上次暂停、上次恢复和完成时间的按钮 问题是,当我发送一个获取DateTime的调用时。例如,现在当用户单击“暂停”时,它获取DateTime。现在,当页面最初加载时,而不是当用户实际单击链接时。理想情况下,有一个解决方案可以在单击时获取实际的系统时间。一种可能的破解方法是每x秒/分钟重新加载一次页面,以确保时间在某种程度上得到准确反映,但这似乎不是很干净 要暂停的代码(paused_at是一个
DateTime.now),:method=>:put,:confirm=>“确定?”,类:“btn btn default btn sm”%>
我为下面的代码提前道歉,但这里是要点。用户可以设置[15,30,45,60120]的时间限制(以分钟为单位)。如果您启动了一项任务但从未暂停过,则完成的数量仅为从现在到开始时间(task.started_at)之间的时间。如果已暂停,则完成的金额是从暂停到开始的时间(=>花费的时间)。如果你已经恢复了,那就是从现在到恢复的时间加上你所花费的时间。按钮显示基于之前是否已启动/暂停/恢复以及最近的时间
<% if task.started_at != nil %>
<% if task.time_limit != nil %>
<div class="col-md-4">
<% if task.time_limit != 0 %>
<% @task_remain = (((task.started_at + task.time_limit * 60).to_time-DateTime.now.to_time)/60) %>
<% @task_remain_pc = @task_remain/task.time_limit*100 %>
<% @task_complete_pc = (1 - (@task_remain_pc/100))*100 %>
<% @task_remain_pc = @task_remain_pc.round(0) %>
<% @task_complete_pc = @task_complete_pc.round(0) %>
<% @task_remain = @task_remain.round(0) %>
<% if task.time_spent == nil %>
<% task.time_spent = 0 %>
<% end %>
<% if task.paused_at != nil %>
<% if task.resumed_at == nil %>
<%= task.paused_at %>
<%= task.started_at %>
<%= task.time_spent = (task.paused_at - task.started_at)/60 %>
<% @task_complete = task.time_spent %>
<% else %>
<% if task.paused_at < task.resumed_at %>
<%= @task_complete = (task.time_spent + (DateTime.now.to_time - task.resumed_at.to_time)/60) %>
<%= @task_complete_pc = (@task_complete/task.time_limit)*100 %>
<% else %>
<%= @task_complete = task.time_spent + ((task.paused_at - task.resumed_at)/60)%>
<%= @task_complete_pc = (@task_complete/task.time_limit)*100 %>
<% end %>
<% end %>
<% end %>
<% end %>
<% if @task_complete_pc < 50 %>
<div class="progress">
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="@task_complete_pc" aria-valuemin="0" aria-valuemax="100" style="width: <%= @task_complete_pc %>%;">
</div>
</div>
<% elsif @task_complete_pc >= 50 && @task_complete_pc < 80 %>
<div class="progress">
<div class="progress-bar progress-bar-warning" role="progressbar" aria-valuenow="@task_complete_pc" aria-valuemin="0" aria-valuemax="100" style="width: <%= @task_complete_pc %>%;">
<%= @task_remain %>% left
</div>
</div>
<% elsif @task_complete_pc >= 80 && @task_complete_pc <= 100 %>
<div class="progress">
<div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="@task_complete_pc" aria-valuemin="0" aria-valuemax="100" style="width: <%= @task_complete_pc %>%;">
<%= @task_remain %> min left
</div>
</div>
<% else %>
<!--listchange.js-->
<% @task_overby = (((task.started_at + task.time_limit * 60).to_time-DateTime.now.to_time)/60).round(0)*(-1) %>
<span class="label label-danger">
Over by
<% if @task_overby < 60 %>
<%= @task_overby %> min!
<% else %>
<%= (@task_overby/60).round(0) %> hr!
<% end %>
</span>
<% end %>
</div>
<% else %>
<div class="col-md-4">
</div>
<% end %>
<div class="col-md-4">
<div class="btn-group">
<% if task.paused_at == nil %>
<%= link_to raw("<i class=\"glyphicon glyphicon-pause\"></i> Pause"), task_path(task, "task[paused_at]" => DateTime.now), :method => :put, :confirm => "Sure?", class: "btn btn-default btn-sm" %>
<% elsif (task.paused_at != nil) && (task.resumed_at == nil) %>
<%= link_to raw("<i class=\"glyphicon glyphicon-play\"></i> Resume"), task_path(task, "task[resumed_at]" => DateTime.now), :method => :put, :confirm => "Sure?", class: "btn btn-default btn-sm" %>
<% elsif task.paused_at > task.resumed_at %>
<%= link_to raw("<i class=\"glyphicon glyphicon-play\"></i> Resume"), task_path(task, "task[resumed_at]" => DateTime.now), :method => :put, :confirm => "Sure?", class: "btn btn-default btn-sm" %>
<% elsif task.paused_at < task.resumed_at %>
<%= link_to raw("<i class=\"glyphicon glyphicon-pause\"></i> Pause"), task_path(task, "task[paused_at]" => DateTime.now), :method => :put, :confirm => "Sure?", class: "btn btn-default btn-sm" %>
<% end %>
<%= link_to raw("<i class=\"glyphicon glyphicon-refresh\"></i> Reset"), task_path(task, "task[started_at]" => DateTime.now), :method => :put, :confirm => "Sure?", class: "btn btn-default btn-sm" %>
<%= link_to raw("<i class=\"glyphicon glyphicon-ok\"></i> Done"), task_path(task, "task[done]" => true), :method => :put, :confirm => "Sure?", class: "btn btn-default btn-sm" %>
</div>
</div>
<% end %>
<% if task.started_at == nil %>
<div class="col-md-4">
</div>
<div class="col-md-4">
<div class="btn-group">
<%= link_to raw("<i class=\"glyphicon glyphicon-play\"></i> Start"), task_path(task, "task[started_at]" => DateTime.now), :method => :put, :confirm => "Sure?", class: "btn btn-default btn-sm" %>
<%= link_to raw("<i class=\"glyphicon glyphicon-ok\"></i> Done"), task_path(task, "task[done]" => true), :method => :put, :confirm => "Sure?", class: "btn btn-default btn-sm" %>
</div>
</div>
<% end %>
=50&&@task\u complete\u pc<80%>
%左
=80&@task\u complete\u pc
左闵
越过
敏!
hr!
DateTime.now),:method=>:put,:confirm=>“确定?”,类:“btn btn default btn sm”%>
DateTime.now),:method=>:put,:confirm=>“确定?”,类:“btn btn default btn sm”%>
task.u在%>
DateTime.now),:method=>:put,:confirm=>“确定?”,类:“btn btn default btn sm”%>
DateTime.now),:method=>:put,:confirm=>“确定?”,类:“btn btn default btn sm”%>
DateTime.now),:method=>:put,:confirm=>“确定?”,类:“btn btn default btn sm”%>
true),:方法=>:放置,:确认=>“确定?”,类:“btn btn默认btn sm”%>
DateTime.now),:method=>:put,:confirm=>“确定?”,类:“btn btn default btn sm”%>
true),:方法=>:放置,:确认=>“确定?”,类:“btn btn默认btn sm”%>
谢谢你的帮助。谢谢 1。选项
您可能应该使用javascript时间,并在用户单击链接后将其设置为参数
d = new Date
d.toISOString()
// => "2014-05-30T18:54:59.092Z"
但是你必须小心设置正确的时区toISOString
返回UTC格式的日期。javascript方式还有一个问题。您不知道用户在本地机器上的时间,所以这可能是个问题
2。选项
您不必在链接中设置暂停时间。当来自暂停链接的请求到达时,为什么不在服务器上设置暂停时间呢?我认为这是一个更好的解决方案。感谢这两个选项!对于选项2,您建议如何设置请求传入时服务器上的暂停时间?几周前我刚开始编程,这听起来非常强大,但它却在我脑海中飞过。感谢您的反馈!这很简单,如果您从示例中的链接发送,您将在
参数[:task][:paused\u at]
中有一些日期和时间。因此,当您尝试将其分配到某个位置时,只需使用DateTime.now
而不是它。或者,如果你展示了你的部分代码,在你指定的时间,我会告诉你,如何改变它。这听起来是个好主意!所以在我的任务控制中
d = new Date
d.toISOString()
// => "2014-05-30T18:54:59.092Z"