2016-01-12 2 views
-1

Я пытаюсь преобразовать дату строки в дату, которая может быть сохранена в базе данных. Это мои попытки:Преобразование строки в дату Ruby on Rails

params[:event][:start_date] = '03-21-2016' 
DateTime.strptime(params[:event][:start_date], '%Y-%m-%dT%H:%M:%S%z') 

или

DateTime.strptime(params[:event][:start_date], '%m-%d-%Y') 

Однако я получаю ошибку о неверном дате. Я не уверен, что я делаю неправильно.

+2

При попытке последнего, он прекрасно работает: 'DateTime.strptime ('03 -21-2016' , '% m-% d-% Y') => Пн, 21 марта 2016 00:00:00 + 0000' –

+0

Это работает до 12-го числа, как день, но что-то более высокое говорит, что аргумент выходит за пределы диапазона. Я предполагаю, что это происходит потому, что меняются месяц и день, но я не понимаю, как это исправить. – Brogrammer

+0

Предположительно это происходит из формы на вашем сайте? Может быть, у вас день и месяц неправильный путь в этой форме? –

ответ

0

Вам необходимо понять, что каждый фрагмент (например, %Y) в строке формата ('%Y-%m-%dT%H:%M:%S%z') означает: прочитайте это.

http://apidock.com/rails/ActiveSupport/TimeWithZone/strftime

После того, как вы это знаете, вы можете настроить формат строки для строки даты у вас есть, или ожидать, чтобы получить: в этом случае, "%m-%d-%Y".

+0

Я тоже пробовал этот формат и получал ту же ошибку. – Brogrammer

+0

Пожалуйста, добавьте значение 'params [: event] [: start_date]' к вашему вопросу. Проверьте свои журналы, чтобы узнать, что это на самом деле, возможно, это не то, что вы думаете. –

1

Один из способов сделать это будет так:

date_string = '03-21-2016' 
month, day, year = date_string.split('-').map(&:to_i) 
DateTime.new(year, month, day) 
+0

Спасибо, это помогло. – Brogrammer

0

При отладке создать новую, основную и простую, версию кода и проверять.

require 'date' 

params = '03-21-2016' 
DateTime.strptime(params, '%m-%d-%Y') # => #<DateTime: 2016-03-21T00:00:00+00:00 ((2457469j,0s,0n),+0s,2299161j)> 

Примечание порядок для формата: '%m-%d-%Y', which works. That's the problem with your first attempt, where you tried to use% Y-% m-% d 2016`.

Ваша вторая попытка действительна, но ваш вопрос показывает, что она не работает. Вы должны быть более осторожны с тестирования:

params = {event:{start_date:'03-21-2016'}} 
DateTime.strptime(params[:event][:start_date], '%m-%d-%Y') # => #<DateTime: 2016-03-21T00:00:00+00:00 ((2457469j,0s,0n),+0s,2299161j)> 
Смежные вопросы