将MomentJS格式化为Rails DateTime

Syl*_*lar 2 ruby ruby-on-rails momentjs reactjs ruby-on-rails-5

你如何格式化moment()到Rails日期时间?

我使用react-datepicker和Rails 5作为后端.

阵营:

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

看看momentjs格式,我看不到rails datetime格式,即:Mon, 10 Oct 2016 15:16:29 UTC +00:00

其目的是通过newDateparams一个轨道控制器: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')
Run Code Online (Sandbox Code Playgroud)

cem*_*-sp 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(...)
...
Run Code Online (Sandbox Code Playgroud)

唯一的问题是你必须解析params[:new_date]Rails后端.
使用简单的DateTimeparse方法或更高性能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
Run Code Online (Sandbox Code Playgroud)

如果需要在控制器中使用日期,只需使用DateTime方法之一解析它:

new_date = DateTime.parse(params[:new_date])
# Or
new_date = DateTime.strptime(params[:new_date], '%Y-%m-%dT%H:%M:%S%z')
Run Code Online (Sandbox Code Playgroud)