我已将下面的代码段添加到我的config / locales / en.yml文件中:
en:
date:
formats:
default: '%m/%d/%Y'
每当我将JSON POST / PUT发送到服务器&我的Rails API包含一个日期,我以这种格式发送它:10/20/2015
这是m / d / Y.
我使用MySQL作为我的RDBMS,并将其存储为2015-10-20
Y-m-d
。
我在Rails提交数据之前尝试在我的Rails控制器中运行Date.strptime(value, '%m/%d/%Y')
,但我不断收到invalid date
错误。
当我在2015年12月10日或2015年10月10日发送时,它会进入。它将其解释为d / m / Y,因此当中间数小于13时可以正常工作。
这是什么解决方案?
编辑:
在我的控制器中,我有这种方法来转换日期:
def contract_party_params
if params[:contract_party][:birthdate]
params[:contract_party][:birthdate] = Date.strptime(params[:contract_party][:birthdate], '%m/%d/%Y').strftime('%Y-%m-%d')
end
params.require(:contract_party).permit(:birthdate)
end
编辑:
Rails服务器输出
Parameters: {"contract_party"=>{"birthdate"=>"10/20/1990"}}
1990-10-20
ArgumentError (invalid date):
app/controllers/contract_parties_controller.rb:60:in `strptime'
app/controllers/contract_parties_controller.rb:60:in `contract_party_params'
app/controllers/contract_parties_controller.rb:23:in `create'
控制器方法:
def create
@contract_party = ContractParty.new(contract_party_params)
if @contract_party.save
render :json => @contract_party,
:status => :created,
:location => @contract_party
else
render json: @contract_party.errors, status: :unprocessable_entity
end
end
答案 0 :(得分:0)
我希望这会奏效,
在 Rails控制台中试用。
Time.strptime("1990-10-20", "%Y-%m-%d").strftime("%Y-%m-%d")
#Output
"1990-10-20"
在控制器中试试这个。
def create
contract_party_params[:birthdate] = Time.strptime(contract_party_params[:birthdate], "%m/%d/%Y").strftime('%Y-%m-%d')
@contract_party = ContractParty.new(contract_party_params)
if @contract_party.save
render json: @contract_party, status: :created, location: @contract_party
else
render json: @contract_party.errors, status: :unprocessable_entity
end
end
private
def contract_party_params
params.require(:contract_party).permit(:birthdate)
end
以下是 Strftime http://apidock.com/rails/ActiveSupport/TimeWithZone/strftime
的链接