【问题标题】:Rails Deadline Calculator Help: future date = number input from user + date selected by the userRails 截止日期计算器帮助:未来日期 = 用户输入的数字 + 用户选择的日期
【发布时间】:2014-02-06 05:34:44
【问题描述】:

我是 Ruby on Rails 的新手,我正在尝试构建一个与此完全相同的截止日期计算器:(click here)。

从超链接示例中可以看出,我的截止日期计算器将允许用户在表单字段中输入给定的数字,以反映距离截止日期的天数。然后,我的截止日期计算器会将该数字添加到用户选择的给定日期。然后,计算器将根据这两个用户输入打印截止日期的结果。

示例:假设用户收到一封信,说明“您有 45 天的时间从 14 年 2 月 5 日起邮寄对这封信的回复......”并且想要计算等于 45 天之后的日期2014 年 2 月 5 日。用户将输入“45”(天)和“2/5/14”(开始日期)并单击“计算”按钮。然后该网站会显示类似“您的截止日期是 2014 年 3 月 22 日星期六”的内容。所以这就是我到目前为止所拥有的......

我的 app/views/pages/about_page.html.erb 文件包含以下代码块:

<div class="row">
    <div class="col-xs-2">

      <%= form_tag do %> 
        <%= number_field_tag 'Days' %>
        <p>AFTER</p>
        <%= date_select('Start', 'start_date') %>
        <%= submit_tag 'Calculate' %>
      <% end %>

      <div>
        <%= @deadline %>
      </div>

    </div>
  </div> 

我的 app/assets/controllers/pages_controller.rb 文件包含以下代码块:

class PagesController < ApplicationController

* * * * 

def about_page
    @days = params[:Days]
    @start = params[:Start]
    @deadline = 'Print the date that is X days after the start date selected by the user.'
end

* * * * 

private
    def page_params
        params.require(:page).permit(:name, :position, :visible)
    end

所以,我的问题是,如何让 Rails 将用户的“:Days”输入添加到用户的“开始”日期输入,然后打印生成的“截止日期”?我一直在无休止地寻找解决方案,但还没有找到任何可以清楚地解释如何计算未来日期的东西,其中用户输入了开始日期和开始日期之后的天数。请帮忙!

【问题讨论】:

    标签: ruby-on-rails ruby forms date datetime


    【解决方案1】:

    您可以使用 + 运算符简单地将天数添加到日期中,例如

    Date.today + 10 => Sun, 16 Feb 2014
    

    在你的情况下,这将转化为

    @deadline = Date.new(params[:Start][:year].to_i, params[:Start][:month].to_i, params[:Start][:day].to_i) + params[:Days].to_i
    

    【讨论】:

    • 谢谢,但此代码将忽略用户提交的DaysStart 输入。代码不应该看起来像这样Date.[Start date selected by user here] + [number of Days entered by user here] =&gt; Sat, 22 Mar 2014吗?另外,这段代码会放在视图文件还是控制器文件中?
    • 我想说的是,您可以使用 + 运算符将天数添加到日期...您当然必须将其替换为您自己的日期和天数。 ..
    • 谢谢丹尼...您的回答让我找到了解决方案!我不得不对你推荐的代码做一个适度的调整:我用"start_date(1i)"替换了:year,用"start_date(2i)"替换了:month,用:day替换了"start_date(3i)"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多