使用 simple_form 格式化日期输入

Posted

技术标签:

【中文标题】使用 simple_form 格式化日期输入【英文标题】:Formatting a date input using simple_form 【发布时间】:2013-11-14 16:18:36 【问题描述】:

我的数据库中有一个date 类型字段。

这是我正在使用的视图代码:

# Using 'as: :string' to avoid those three dropdowns rails generates.
= f.input_field :start_date, as: :string, class: 'form-control datepicker'

保存日期时,我使用一个 jquery 插件,该插件显示日历并写入日期,例如:11/05/2013

但在编辑同一条记录时,输入会填充值2013-05-11

我怎样才能让它变得如此简单_form实际上尊重我在en.yml中定义的日期格式?

【问题讨论】:

【参考方案1】:

这是你需要的:

f.input :my_date,
        :as => :string, 
        :input_html =>  :value => localize(f.object.my_date) 

PS : 这是 google search 的第一个链接 :)

【讨论】:

还值得知道您可以指定本地化功能的格式,例如localize(f.object.my_date, format: :short) 也可以提供格式如:localize(f.object.my_date, format: "%-m/%d/%Y") 现在 this 是我谷歌搜索中的第一个链接。 :) 这不适用于 HTML5 日期字段,例如在移动 Safari 浏览器上。 HTML5 日期字段期望值采用 yyyy-mm-dd 格式。这个问题有解决办法吗? @morgler, localize(f.object.my_date, format: "%yyy-%mm-%dd")【参考方案2】:

我创建了这个类,它可以很容易地做到这一点:

f.input :my_date, :as => :date_picker

将此类添加到您的 lib/ 文件夹并确保包含它(或将其配置为自动加载):

class DatePickerInput < SimpleForm::Inputs::StringInput
  def input
    value = @builder.object.send(attribute_name)
    input_html_options[:value] = case value
                                   when Date, Time, DateTime
                                     format = options[:format] || :medium
                                     value.to_s(format)
                                   else
                                     value.to_s
                                 end

    input_html_options[:class] ||= []
    input_html_options[:class] << "date_picker_input"
    @builder.text_field(attribute_name, input_html_options)
  end
end

【讨论】:

以上是关于使用 simple_form 格式化日期输入的主要内容,如果未能解决你的问题,请参考以下文章

您如何使用 Bootstrap 5 和 simple_form 编写切换开关

Rails Simple_Form添加年份到日期字段

EXCEl表格里如何输入自定义格式的日期

在 vue.js 中格式化输入类型日期

oracle ORA-01840:输入值对于日期格式不够长,请高手帮忙。有非法数据?怎么处理?

用于格式化输入框以获取日期 mm/dd/yyyy 的 HTML5 模式?