2011-07-13 21 views
5

我把這個日期字符串與我15-07-2011這是格式dd-mm-yyyy。我需要從這個字符串創建一個Date對象。所以我必須將dd-mm-yyyy中的日期轉換爲mm-dd-yyyy格式。用dd-mm-yyyy轉換成mm-dd-yyyy格式的更清晰的方法

我所做的是以下幾點。現在

var myDate = '15-07-2011'; 
var chunks = myDate.split('-'); 

var formattedDate = chunks[1]+'-'+chunks[0]+'-'+chunks[2]; 

我得到的字符串2011年7月15日這是mm-dd-yyyy格式,我可以把它傳遞給Date()構造函數來創建一個Date對象。我想知道是否有更乾淨的方法來做到這一點。

+5

它看起來比較乾淨,我的字符串。 – MRAB

+0

你的意思是較短? – William

+0

@Lime不,我的意思是更清潔 - 廣泛接受的做法。 – Sparky

回答

5

這看起來很乾淨。

+0

所有的答案都非常有幫助和保證。我特別感謝Edgar Bonet對他的有用評論。如果他回答了我的話,我會選擇他接受的答案(對於保羅·索尼或者其他任何回答/評論的好人來說都不是冒犯者,所有回答的人都很有幫助)。謝謝大家。 – Sparky

2

重新排列字符串的塊是完全「乾淨」和合法的方式來更改日期格式。然而,如果你不滿意(也許你想知道你正在重新安排的字符串實際上是一個有效的日期?),那麼我建議你看看DateJS,這是一個全職的工作,功能強大的JavaScript日期處理庫。

+0

感謝您指向DateJS的指針。但可能我應該堅持目前的方式,因爲我的要求只是將dd-mm-yyyy轉換爲mm-dd-yyyy。不希望爲此另一個庫的開銷。 – Sparky

-2

嘗試

myDate.format("mm-dd-yyyy"); 
+1

'試試'?什麼時候編程基於嘗試隨機的東西? '#format'只有在'Date.prototype'增加了這樣的方法時纔會起作用。 –

+0

'myDate'甚至不是日期:它是一個字符串!然後這個假設的'format()'方法應該在'String.prototype'中,這樣做更不合理。 –

1

取決於你的意思是通過清潔

var myDate = '15-07-2011'; 
var chunks = myDate.split('-'); 
var formattedDate = [chunks[1],chunks[0],chunks[2]].join("-"); 

有人會說這是清潔的,但它本質上不相同。

1
var formattedDate = chunks[1] + '-' + chunks[0] + '-' + chunks.pop(); 
+0

它看起來像你加了三個字符和一個無用的函數調用給我。 – cbrandolino

+0

謝謝..但是,當你完全知道數組索引並且它不會改變時,爲什麼要使用pop()? – Sparky

+0

如果您不知道數組索引,並且之後不再需要塊,那麼我會更快地引用數組的最後一個元素。如果你的代碼是任務關鍵的,當然不需要像@cbrandolino所說的無用函數調用。 –

1

如果你想要你可以減少一些變量。

var date = '15-07-2011'.split('-'); 
date = date[1]+'-'+date[0]+'-'+date[2]; 

如果你想要一個襯墊

var date = '15-07-2011'.replace(/(\d*)-(\d*)-(\d*)/,'$2-$1-$3') 
+0

感謝石灰。正則表達式不是我的東西雖然:) – Sparky

+1

是的,他們是非常醜陋的^ _^ – William

1
var c = '01-01-2011'.split('-'); 
var d = new Date(c[2],c[1]-1,c[0]); 
+1

+1,因爲這不取決於'新日期()'可能接受的特定文本格式。 –

+0

爲什麼寫成c [1] -1? – Sparky

+1

@Sparky:由於Date對象的計數從0 = 1月開始。 –

0

我來補充我的意見,你的解決方案是完全有效的,但如果你想要不同的東西:

var myDate = '15-07-2011'; 
myDate.split('-').reverse().join('-'); 

會給你'2011年7月15日',雖然不完全是你要求的,將被正確解析Date

0

我寫了一個庫,用於分析,操縱和格式化命名爲Moment.js

var date = moment('15-07-2011', 'DD-MM-YYYY').format('DD-MM-YYYY');