Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails DateTime.now在设置变量(Rails)时延迟_Ruby On Rails_Datetime - Fatal编程技术网

Ruby on rails DateTime.now在设置变量(Rails)时延迟

Ruby on rails DateTime.now在设置变量(Rails)时延迟,ruby-on-rails,datetime,Ruby On Rails,Datetime,我已经创建了一个应用程序,它具有计时器功能,您可以在其中启动、暂停/恢复和完成。我已将_链接到设置启动、上次暂停、上次恢复和完成时间的按钮 问题是,当我发送一个获取DateTime的调用时。例如,现在当用户单击“暂停”时,它获取DateTime。现在,当页面最初加载时,而不是当用户实际单击链接时。理想情况下,有一个解决方案可以在单击时获取实际的系统时间。一种可能的破解方法是每x秒/分钟重新加载一次页面,以确保时间在某种程度上得到准确反映,但这似乎不是很干净 要暂停的代码(paused_at是一个

我已经创建了一个应用程序,它具有计时器功能,您可以在其中启动、暂停/恢复和完成。我已将_链接到设置启动、上次暂停、上次恢复和完成时间的按钮

问题是,当我发送一个获取DateTime的调用时。例如,现在当用户单击“暂停”时,它获取DateTime。现在,当页面最初加载时,而不是当用户实际单击链接时。理想情况下,有一个解决方案可以在单击时获取实际的系统时间。一种可能的破解方法是每x秒/分钟重新加载一次页面,以确保时间在某种程度上得到准确反映,但这似乎不是很干净

要暂停的代码(paused_at是一个datetime变量)

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"