【问题标题】:Format MomentJS to Rails DateTime将 MomentJS 格式化为 Rails 日期时间
【发布时间】:2016-10-11 07:51:47
【问题描述】:

如何将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 datetime 格式的东西,即: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')

【问题讨论】:

    标签: ruby-on-rails ruby reactjs momentjs ruby-on-rails-5


    【解决方案1】:

    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]。
    使用简单的 DateTime 类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')
    

    【讨论】:

    • 如果您覆盖#new_date=,当您尝试为其分配一个实际的DateTime 时会出错。可能要加if value.is_a? String。此外,您需要将解析后的值传递给super 或调用write_attribute,仅分配给@new_date 不会持久化。
    • @gmcnaughton 谢谢你的评论!我确定了答案
    • 感谢您的修复! :)
    • 问题,所以newDate 会是this.state.startDate?
    • @Sylar ,您应该将 moment.js 日期格式化为字符串以将其作为参数传递(就像您在问题中所做的那样)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多