将 MomentJS 格式化为 Rails DateTime

Format MomentJS to Rails DateTime

如何将 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

查看 momentjs formats,我看不到任何接近 rails 日期时间格式的内容,即:Mon, 10 Oct 2016 15:16:29 UTC +00:00

目的是将 newDate 作为 params 传递给 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')

moment.js object 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]
使用简单的 DateTime class 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

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

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