2014-02-14 60 views

回答

0

我不能刪除這個,因爲OP選擇它作爲答案(OP請選擇Xotic750的)答案。

See Xotic750's answer

+0

你還需要填補這個月份和日子:) – Archer

+0

@Archer是留給讀者的一個練習:) –

+0

如果你有足夠的幸運有一個能正確解析字符串的環境。 – Xotic750

2

可以打破串入的部分,則位格式化成你所需要的:

// Reformat string like: Fri Feb 21 2014 00:00:00 GMT-0800 (Pacific Standard Time) 
// do yyyy-mm-dd 
function reformatDateString(s) { 
    function z(n){return (n<10?'0':'') + n;} 
    var months = {jan:'01', feb:'02', mar:'03', apr:'04', may:'05', jun:'06', 
        jul:'07', aug:'08', sep:'09', oct:'10', nov:'11', dec:'12'}; 
    s = s.split(/[ :]/g); 
    return s[3] + '-' + months[s[1].toLowerCase()] + '-' + z(s[2]); 
} 

您可以使用日期的構造,但在這裏是沒有必要的。使用構造函數解析字符串是有問題的,因爲OP中的字符串不適合ES5中指定的格式(所有使用的瀏覽器都不支持此格式),而解析則與實現相關。

所以要使用Date需要解析零件,導致許多額外的函數調用。

1

日期Fri Feb 21 2014 00:00:00 GMT-0800採用標準RFC 2822格式,因此您可以使用new Date()作爲參數創建新日期。這會將其轉換爲UTC(自1970年1月1日以來的毫秒),您可以操作它。

然後可以轉換UTC爲ISO 8601擴展格式(2014-02-21T00:00:00.000Z)與toISOString()方法,並得到了T之前的文本:

var utcDate = new Date('Fri Feb 21 2014 00:00:00 GMT-0800'); 
var isoExtendedDate = utcDate.toISOString(); 
var isoSimpleDate = isoExtendedDate.split("T")[0]; 
+1

ES5不需要實現來支持除ISO 8601版本以外的任何格式。其他格式的解析依賴於實現 – RobG

2

使用標準的字符串/數組操作

var timeStamp = 'Fri Feb 21 2014 00:00:00 GMT-0800 (Pacific Standard Time)', 
    months = { 
     Jan: 1, 
     Feb: 2, 
     Mar: 3, 
     Apr: 4, 
     May: 5, 
     Jun: 6, 
     Jul: 7, 
     Aug: 8, 
     Sep: 9, 
     Oct: 10, 
     Nov: 11, 
     Dec: 12 
    }, 
    parts = timeStamp.split(' ', 4).slice(1), 
    myStamp; 

function pad(val) { 
    if (val < 10) { 
     val = '0' + val; 
    } 

    return val; 
} 

parts[0] = months[parts[0]]; 
parts.unshift(parts.pop()); 
parts[1] = pad(parts[1]); 
parts[2] = pad(parts[2]); 
mystamp = parts.join('-'); 
console.log(mystamp); 

輸出

2014-02-21 

jsFiddle

+0

卷積並且有點冗長,但它完成了工作。 :-) – RobG

+0

@RobG它是'-vv'模式。謝謝。 ;) – Xotic750

相關問題