2017-01-18 2 views
1

У меня есть массивы, как показано ниже:преобразования «даты» в различных форматах для конкретного формата в рубин

date_val = ['12-20-1986', '23-01-2013', '2013-01-01', '12/01/2013', '23/12/1980'] 
formats = ['mm-dd-yyyy', 'dd-mm-yyyy', 'yyyy-dd-mm', 'mm/dd/yyyy', 'dd/mm/yyyy'] 

, где массив formats показывает формат, в котором массив date_val хранит значения.

Я выполняется цикл, в котором один за другим все значения будут приходить и мне нужно преобразовать значения в массиве date_val к required_format

required_format = 'yyyy-mm-dd' 

ответ

4

'yyyy-mm-dd' не является допустимым форматом strpfime. Его необходимо преобразовать ('%Y-%m-%d') сначала:

require 'date' 

date_val = ['12-20-1986', '23-01-2013', '2013-01-01', '12/01/2013', '23/12/1980'] 
formats = ['mm-dd-yyyy', 'dd-mm-yyyy', 'yyyy-dd-mm', 'mm/dd/yyyy', 'dd/mm/yyyy'] 
required_format = 'yyyy-mm-dd' 

def to_strf_format(mmddyyyy) 
    mmddyyyy.sub('yyyy','%Y').sub('dd','%d').sub('mm','%m') 
end 

new_date_vals = date_val.zip(formats).map do |date_str, mmddyyyy| 
    date = Date.strptime(date_str, to_strf_format(mmddyyyy)) 
    date.strftime(to_strf_format(required_format)) 
end 

p new_date_vals 
#=> ["1986-12-20", "2013-01-23", "2013-01-01", "2013-12-01", "1980-12-23"] 
Смежные вопросы