2012-08-11 39 views

回答

3

因爲你面對的日期,我會去通過Date庫(你必須require 'date'的一些功能),因爲這是最靈活和最穩定的方法:

Date.strptime(string, '%m/%d/%Y').strftime('%Y-%m-%d') 
#=> "2012-08-01" 

正如你可以看到兩個strptime(「字符串分析時」)和strftime(「字符串格式時間」)採取格式〜應變gs正是描述他們在做什麼。

如果你不想去通過Date,你可以使用gsub這樣的:

string.gsub(%r{(\d+)/(\d+)/(\d+)}, '\3-\1-\2') 
#=> "2012-08-01" 
0
month, day, year = string.split('/').map(&:to_i) 
rearranged = sprintf "%04d-%02d-%02d", year, month, day 

它做一些額外的工作(在它to_i上每個元素),但它可能會在稍後派上用場。

1
m, d, y = string.split("/") 
"#{y}-#{m}-#{d}" 

string.split("/").rotate(-1).join("-") 
+0

它可以在一條線上完成嗎? – aperture 2012-08-11 11:06:16

+0

@aperture:是的,它可以在一行中完成。只要刪除換行符:'m,d,y = string.split(「/」); 「#{Y} - #{米} - #{d}」'。不知道你爲什麼想這麼做。 – 2012-08-11 13:22:54

+0

@JörgWMittag我認爲OP想要在一個鏈條上做到這一點。 – sawa 2012-08-11 13:43:01

1

邁克爾·科爾的答案是正確

只是另一個答案

Date.parse(string).strftime('%Y-%d-%m') 
0

我找到它更簡單:

'30/10/2016'.split('/').reverse().join('-')