2017-01-18 110 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"]