我剛纔已經回答了類似的問題here,並已列入我的回答如下:
我還需要得到這個工作,並支持不使用以美國爲中心的日期格式多個區域設置,如:EN-AU(澳大利亞),其中有日期格式DD/MM/YYYY。
的問題
Rails的預計日期格式是從瀏覽器yyyy-mm-dd
,但要顯示在用戶的語言環境的日期。雖然日期控件允許您指定顯示格式,但它不允許您單獨指定要發送回服務器的格式。
解決方案
構建發送正確的格式返回給你的Rails服務器隱藏的輸入字段。我使用自定義的simple_form輸入控件執行此操作,該控件構建日期選擇器輸入字段和隱藏字段,並在輸入控件更改時使用一些javascript轉換爲導航日期。
的結果是,你可以在導軌一個很好的引導日期選擇器,並與simple_form使用如下:
<%= f.input :date, as: :bootstrap_datepicker %>
或者使用長日期格式:
<%= f.input :date, as: :bootstrap_datepicker, input_html: { format: :long } %>
實現
創建或編輯以下文件:
的Gemfile
gem 'bootstrap-sass'
gem 'bootstrap-datepicker-rails'
配置/區域設置/ EN-AU。陽明海運
en-AU:
date:
datepicker:
default: "dd/mm/yyyy"
long: "dd MM, yyyy"
formats:
default: ! '%d/%m/%Y'
long: ! '%d %B, %Y'
配置/區域設置/ EN-US.yml
en-US:
date:
datepicker:
default: "mm/dd/yyyy"
long: "MM dd, yyyy"
formats:
default: "%m/%d/%Y"
long: ! '%B %d, %Y'
應用程序/資產/樣式表/ application.css.scss
@import "bootstrap-responsive";
@import "bootstrap-datepicker";
應用程序/ assets/javascripts/application.js.coffee
#= require bootstrap
#= require bootstrap-datepicker
#= require bootstrap-datepicker-rails
或者,應用程序/資產/ Javascript角/ application.js中
//= require bootstrap
//= require bootstrap-datepicker
//= require bootstrap-datepicker-rails
應用程序/資產/ Javascript角/ 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)
app/inputs/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
真棒答案的形式,感謝的是,只是指出出的是,在區域設置的日期格式應該如下: ''' 日期: 日期選擇器: 缺省: 「%米/%d /%Y」 長: 「%B%d,%Y」 格式: 默認:「%m /%d /%Y」 長:! '%B%d,%Y' ''' 請參閱http://apidock.com/ruby/DateTime/strftime – X2theZ 2014-01-21 21:12:02
謝謝,編輯了答案以反映正確的格式字符串 – 2014-01-28 01:06:57