3

我正在使用 bootstrap-datepicker.js,它工作正常。

<div class="well">
<div id="dp5" class="input-append date" data-date-format="dd-mm-yyyy" data-date="12-02-2012">
<input class="span2" type="dp5" readonly="" value="12-02-2012" size="16">
<span class="add-on">
<i class="icon-th"></i>
</span>
</div>

  </div>

我想在这种类型的rails中以我的形式使用它

<%= simple_form_for(@customer) do |f| %>
  <%= f.error_notification %>

  <div class="form-inputs">
    <%= f.input :name %>
    <%= f.input :email %>
    <%= f.input :address %>
    <%= f.input :phone %>
    <%= f.input :Projects %>
     <%= f.radio_button :status, 0, :checked => true%>Publish
    <%= f.radio_button :status, 1 %>Unpublish
    <%= f.radio_button :status, 2 %>Trash


  </div>

  <div class="form-actions">
    <%= f.button :submit %>
  </div>
<% end %>

在这里,我想将日期选择器放在我的表单中

`<%f.(datepicker)%>`

这样当我提交表单时,我会在参数日期中获得日期值。当我单击日期选择器中的日期时,它应该隐藏并且默认日期应该指向当前日期。我的 appication.js 包括

 $(function(){  
        $('#dp5').datepicker({
            format: 'mm-dd-yyyy'
        });
        $('#dp3').datepicker({
            format: 'mm-dd-yyyy'
        });


    });
4

4 回答 4

5

采用<%= f.text_field :name_of_the_date_column, :value=>Date.today.strftime('%m-%d-%Y'), :id =>"dp5" %>

要自动隐藏使用这个

$("#dt5").datepicker({
        format: 'mm-dd-yyyy'
    })
.on('changeDate', function(ev){
  $('#dt5').datepicker('hide');
});

代替

$("#dt5").datepicker();
于 2012-08-23T08:50:30.630 回答
5

我刚刚在这里回答了一个类似的问题,并在下面包含了我的答案:


我还需要让它工作并支持不使用以美国为中心的日期格式的多个语言环境,例如:日期格式为 dd/mm/yyyy 的 en-AU(澳大利亚)。

问题

Rails 期望日期格式yyyy-mm-dd来自浏览器,但您希望在用户的区域设置中显示日期。虽然日期控件允许您指定显示格式,但它不允许您单独指定要发送回服务器的格式。

解决方案

构建一个隐藏的输入字段,将正确的格式发送回您的 Rails 服务器。我使用自定义 simple_form 输入控件执行此操作,该控件构建日期选择器输入字段和隐藏字段,并在输入控件更改时使用一些 javascript 转换为 rails 日期。

结果是您可以在 rails 中有一个不错的引导日期选择器,并将其与 simple_form 一起使用,如下所示:

<%= f.input :date, as: :bootstrap_datepicker %>

或者使用长日期格式:

<%= f.input :date, as: :bootstrap_datepicker, input_html: { format: :long } %>

执行

创建或编辑以下文件:

宝石文件

gem 'bootstrap-sass'
gem 'bootstrap-datepicker-rails'

config/locales/en-AU.yml

en-AU:
  date:
    datepicker:
      default: "dd/mm/yyyy"
      long: "dd MM, yyyy"
    formats:
      default: ! '%d/%m/%Y'
      long: ! '%d %B, %Y'

config/locales/en-US.yml

en-US:
  date:
    datepicker:
      default: "mm/dd/yyyy"
      long: "MM dd, yyyy"
    formats:
      default: "dd/mm/yyyy"
      long: ! '%B %d, %Y'

应用程序/资产/样式表/application.css.scss

@import "bootstrap-responsive";
@import "bootstrap-datepicker";

应用程序/资产/javascripts/application.js.coffee

#= require bootstrap
#= require bootstrap-datepicker
#= require bootstrap-datepicker-rails

或者,app/assets/javascripts/application.js

//= require bootstrap
//= require bootstrap-datepicker
//= require bootstrap-datepicker-rails

应用程序/资产/javascripts/bootstrap-datepicker-rails.js.coffee

$ ->
  # convert bootstrap-datepicker value to rails date format (yyyy-mm-dd) on our hidden field
  $(document).on 'changeDate', '.bootstrap-datepicker', (evt) ->
    rails_date = evt.date.getFullYear() + '-' + ('0' + (evt.date.getMonth() + 1)).slice(-2) + '-' + ('0' + evt.date.getDate()).slice(-2)
    $(this).next("input[type=hidden]").val(rails_date)

应用程序/输入/bootstrap_datepicker_input.rb

class BootstrapDatepickerInput < SimpleForm::Inputs::Base
  def input
    text_field_options = input_html_options.with_indifferent_access
    format =  text_field_options.delete(:format)
    hidden_field_options = text_field_options.dup
    hidden_field_options[:class] = text_field_options[:class].dup # so they won't work with same array object
    hidden_field_options[:id] = "#{attribute_name}_hidden"
    text_field_options[:class] << 'bootstrap-datepicker'
    text_field_options[:type] = 'text'
    text_field_options[:value] ||= format_date(value(object), format)
    set_data_option text_field_options, 'date-format', I18n.t(format, scope: [:date, :datepicker], default: :default)
    default_data_option text_field_options, 'provide', 'datepicker'

    return_string =
      "#{@builder.text_field(attribute_name, text_field_options.to_hash)}\n" +
      "#{@builder.hidden_field(attribute_name, hidden_field_options.to_hash)}\n"
    return return_string.html_safe
  end

protected

  def default_data_option(hash, key, value)
    set_data_option(hash,key,value) unless data_option(hash, key)
  end

  def data_option(hash, key)
    hash[:data].try(:[],key) || hash["data-#{key}"]
  end

  def set_data_option(hash, key, value)
    hash[:data].try(:[]=,key,value) || (hash["data-#{key}"] = value)
  end

  def value(object)
    object.send @attribute_name if object
  end

  def format_date(value, format=nil)
    value.try(:strftime, I18n.t(format, scope: [ :date, :formats ], default: :default))
  end
end
于 2013-09-26T02:35:21.460 回答
3

您可以更简洁地表达这一点:

$("#dt5").datepicker({
                           format: 'mm-dd-yyyy',
                           autoclose: true
                           })
于 2013-03-12T11:10:23.337 回答
1

我检查了所有答案,没有一个对我有用。我使用了以下内容:

<%= f.text_field :article_date, {"data-provide" => 'datepicker', 
                                 "data-date-format" => "yyyy-mm-dd"} %>

在我的情况下,MySQL 预期yyyy-mm-dd格式,而 datepicker 默认格式是mm/dd/yyyy. 恕我直言,用户不关心格式,所以我宁愿到处都有相同的格式,省去很多麻烦。

于 2017-10-18T03:31:33.927 回答