2010-02-03 261 views
3

採取被格式化像一個字符串的最好方法......日期字符串格式化

YYYY-MM-DD

,並使它看起來像...

MM/DD/YYYY

的原因,它是不是JavaScript日期對象是因爲我正在處理大量數據,並且這些日期正在從數據庫中提取。

我看不需要將它轉換爲日期對象。

+0

可能以某種身份或其他重複...不能在第一次搜索 – 2010-02-03 18:21:56

+0

這是最好日期時間解析和格式化解決發現了什麼,不是字符串操作作爲標籤建議。 – 2010-02-03 18:22:31

回答

4

如何:

s.substr(5,2) + '/' + s.substr(8) + '/' + s.substr(0,4) 
+1

不錯的單行。 :-) – cjstehno 2010-02-03 18:27:07

+0

@cjstehno:我也換了一天一天,但現在已經修好了。 :) – Guffa 2010-02-03 18:28:11

+0

+1和簡潔的接受 – 2010-02-03 18:32:40

1

通過蠻力,你可以這樣做:

var old = '2010-02-03'.split('-'); 
var desired = old[1] + '/' + old[2] + '/' + old[0]; 

保存與Date對象工作的麻煩。

+0

不要過於迂腐,但這是行不通的。 'new'是Javascript中的保留字。你將不得不使用不同的變量名稱。 – ghoppe 2010-02-03 19:13:29

+0

大聲笑...我修好了,很好。 :-) – cjstehno 2010-02-03 21:23:17

1

您可以使用JavaScript的(假設JS,因爲你的問題被標記爲這樣)正則表達式:

var date = "2010-05-09"; 
var formatted = date.replace(/([0-9]{4})-([0-9]{2})-([0-9]{2})/, "$2/$3/$1") 

我喜歡什麼這更比使用字符串是,它似乎更加明顯正在做什麼。

1

如果你用斜槓它將解析取代破折號,那麼你可以使用日期函數來獲取各種組件(或轉換使用不同的toString()函數的一個字符串)。

var date = new Date(Date.parse(old.replace(/-/g,'/'))); 
alert(date.getMonth() + '/' + date.getDate() + '/' + date.getFullYear()); 

這樣做的好處是能夠將日期用作計算日期,而不僅僅是進行字符串格式化。如果字符串格式是所有你需要的你的日期字符串總是有效的,那麼使用@Guffa的substr方法可能是處理它的最好方法。

+0

日期沒有功能,並始終有效(他們插入作爲時間戳通過MySQL)...所以至少我希望mysql的datestamp格式將是有效的! lol – 2010-02-03 19:20:39

+0

實際上,在我的測試中,vivin的正則表達式的速度快了20%。最慢的方法是將cjstehno分成數組和組合方法。 – ghoppe 2010-02-03 19:32:30

+1

@ghoppe - 好的,但我會向你提出「更快」並不總是等同於「更好」。可讀性也是一個問題。根據你的正則表達式foo,正則表達式的解決方案可能簡直難以理解,而任何人都應該能夠找出substr。實際上,我發現我是最易理解的,儘管它可能是最慢的。任何不能立即看到它做什麼的人都不應該編程。 :-) – tvanfosson 2010-02-03 19:40:56