转换日期'以不同的格式表示ruby中的特定格式

时间:2017-01-18 10:59:03

标签: arrays ruby 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']

数组formats显示数组date_val存储值的格式。

我正在执行一个循环,其中所有值将逐一进入,我需要将数组date_val中的值转换为required_format

required_format = 'yyyy-mm-dd'

1 个答案:

答案 0 :(得分: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"]