rails - 如何以us格式显示和保存日期?

时间:2014-08-20 01:37:10

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 rspec

我可以让我的content_date以mm / dd / yyyy格式显示,我可以正确保存。 如果我在其他数据中有验证错误,则表单会以mm/dd/yyyy所需的方式重新显示日期 我也可以编辑记录并以格式mm / dd / yy

查看日期

我遇到的问题是编辑记录会翻转月份和年份

08/02/2012

变为

02/08/2012

08/19/2012

根本不起作用。

具有讽刺意味的是,如果我连续两次录制唱片而且日期不超过12,则会翻回原始值

查看:

= f.text_field :content_date, id: 'datepicker', size: 10

我得到了新的并创建了(links控制器)

def new
  @link = Link.new
  @link.content_date=Time.new().strftime("%m/%d/%Y")
  ...

def edit
  @link = Link.find(params[:id])
  @link.content_date=Time.new().strftime("%m/%d/%Y") if @link.content_date.nil?

def create
  @link = Link.new(link_params)

  if @link.content_date.nil?
    @link.content_date = Time.new().strftime("%Y/%m/%d")
  else
    @link.content_date = @link.content_date.strftime("%Y/%m/%d")
  end 

但是updaterails 4.0.2)现在只是

def update
  redirect_to Link.find(params[:id]).tap { |link|
    link.update!(link_params)
  }
end

我无法弄清楚如何在更新中更改:content_date,就像我在创建中所做的那样

fyi我的american_date中有Gemfile宝石,但它没有帮助(如果我删除它也无济于事。)

我目前在config/initializers/

中没有任何日期初始值设定项

js日期选择器:

$ cat app/assets/javascripts/date-picker.js 

$(function() {
$( "#datepicker" ).datepicker();
});
$(function(){
var dateInput = $("#datepicker");
var format = 'yy-mm-dd';
dateInput.datepicker({dateFormat: format});
dateInput.datepicker('setDate', $.datepicker.parseDate(format, dateInput.val()));
});

1 个答案:

答案 0 :(得分:1)

我改变了

/app/assets/javascripts/datepicker.js

改变

var format = 'yy-mm-dd';

to

var format = 'mm/dd/yyyy';

然后我添加了文件config/inititlaizers/date-format.js

# Date
# ----------------------------
Date::DATE_FORMATS[:default] = "%m/%d/%Y"

# DateTime
# ----------------------------
DateTime::DATE_FORMATS[:default] = "%m/%d/%Y"

# Time
# ----------------------------
Time::DATE_FORMATS[:default] = "%m/%d/%Y %H:%M:%S"

这有助于所有显示和输入字段以及日期选择器,但日期仍然翻转。

最后(这一位修复了日期翻转部分),我将控制器改为:

def update

  r = Link.find(params[:id])
  r.tap { |link|
    link.update!(link_params)
  } 
  r.update!(:content_date => link_params[:content_date].to_date.strftime("%Y-%d-%m"))
  redirect_to r

  end