2016-10-11 43 views
2

如何将moment()格式化为Rails日期时间?将MomentJS格式化为Rails日期时间

Im使用react-datepicker和Rails 5作为后端。

阵营:

let newDate = this.state.startDate.format('YYYY-MM-DD HH:mm') 
console.log(newDate); #=> 2016-10-11 08:46 

momentjs formats看,我什么也看不到接近轨日期时间格式,即:Mon, 10 Oct 2016 15:16:29 UTC +00:00

目的是通过newDateparams到Rails控制器:params[:new_date]

更新:

cema-sp的答案是我的答案的最后一部分,但我得到的错误。为了解决这样的:

# JS: 
let newDate = this.state.startDate.format(); # no format type 

# Controller: 
DateTime.strptime(params[:new_date], '%Y-%m-%dT%H:%M:%S%z') 

回答

5

moment.js对象newDate可以用你喜欢(例如像问题YYYY-MM-DD HH:mm或默认格式)任何字符串格式化并发送至服务器:

const newDate = this.state.startDate.format() 
... 
fetch(apiEndpointUrl, { 
    method: 'POST', 
    body: JSON.stringify({ 
    new_date: newDate, 
    }) 
}).then(...) 
... 

唯一的问题是你必须在Rails后端解析params[:new_date]
使用简单日期时间parse方法或更高性能strptime(提供它选择格式)。

如果您想更新模型,你可以使用setter方法:如果您需要在控制器日期的工作

def new_date=(value) 
    parsed = if value.is_a? String 
      DateTime.parse(value) 
      # Or more performant 
      # DateTime.strptime(value, '%Y-%m-%dT%H:%M:%S%z') 
      else 
      value 
      end 

    write_attribute(:new_date, parsed) 
end 

,只是用一个日期时间方法解析它:

new_date = DateTime.parse(params[:new_date]) 
# Or 
new_date = DateTime.strptime(params[:new_date], '%Y-%m-%dT%H:%M:%S%z') 
+1

如果您重写'#new_date =',当您尝试为其分配实际的'DateTime'时会出错。可能要添加'if value.is_a? String'。此外,您需要将解析的值传递给'super'或调用'write_attribute',只是分配给'@ new_date'将不会保留它。 – gmcnaughton

+0

@gmcnaughton感谢您的评论!我修复了回答 –

+0

感谢您的修复! :) – gmcnaughton