2016-10-11 2 views
2

Как вы форматируете moment() в Rails datetime?Формат MomentJS to Rails DateTime

Im используя react-datepicker и Rails 5 как задний конец.

React:

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

Цель состоит в том, чтобы передать newDate в params к контроллеру рельсов: 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(...) 
... 

Единственное, что вам нужно разобрать params[:new_date] на бэкэнде Rails.
Используйте простой DateTime класс parse способ или более совершенный strptime (укажите его выбранный формат).

Если вы хотите обновить модель вы можете использовать сеттер метод:

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') 
+1

Если вы переопределите '# new_date =', вы получите ошибки при попытке присвоить ему фактическое 'DateTime'. Может захотеть добавить 'if value.is_a? String'. Кроме того, вам нужно передать анализируемое значение 'super' или вызвать' write_attribute', просто присваивание '@ new_date' не будет сохраняться. – gmcnaughton

+0

@gmcnaughton благодарим вас за комментарий! Я исправил ответ –

+0

Спасибо за исправление! :) – gmcnaughton

Смежные вопросы