2009-12-27 64 views
0

我有這個作爲我的日期:1212009所以這應該是像12/1/2009,但我堅持這個作爲一個ID字段和ID字段不能有破折號在那裏的名稱。如何將字符串轉換爲日期javascript?

現在可以java腳本採取這個數字,並重新添加削減爲我或如何去做這件事?

謝謝

+1

你怎麼知道這不是2009年1月21日? – ngn 2009-12-27 20:58:46

回答

1

你應該有月份和日期的兩位數字,因爲"1212009"是模糊的,可能被解釋爲"1/21/2009""12/1/2009"

如果添加前導零,你知道會有始終8位,所以你可以做這樣的事情:

var str = "12012009" 
var result = str.replace(/(\d{2})(\d{2})(\d{4})/, "$1/$2/$3"); 
// 12/01/2009 

或者

var result = str.match(/(\d{2})(\d{2})(\d{4})/).slice(1).join('/'); 
// 12/01/2009 
+0

爲什麼使用'splice(1)'而不是'slice(1)'?我沒有看到這一點,也刪除了比賽中的第一個元素。 – 2009-12-27 21:02:30

+0

輸入應該是一個數字而不是字符串,所以首先你必須將它轉換成一個字符串。 – Rich 2009-12-27 21:04:26

+0

@Elijah:是的,拼寫是不必要的,因爲數組引用不會被使用,我刪除第一個元素,因爲它是整個匹配的字符串。 – CMS 2009-12-27 21:05:23

1

沒有前導零,不可能做出可靠的轉換。不可能知道1232009是1/23/2009還是12/3/2009沒有前導零。另外,您的示例編號也可以解釋爲1/21/2009。

0

您只需將字符串傳遞到新的日期構造函數中即可。

這裏是一個很好的JavaScript資源讓你看看。

http://www.javascriptkit.com/jsref/date.shtml

+0

要做到這一點,我將不得不拆分字符串以獲得年,月和日。我不能僅僅通過12012009進入日期構造函數,它會回到「無效日期」。 – chobo2 2009-12-27 21:16:15

0

假設您添加的領先零以消除歧義,你可以這樣格式化日期:

dateString = String(id).match(/(\d{2})(\d{2})(\d{4})/).slice(1).join('/') 
-1

也許這會幫助你擺脫六七號長日期(最重要的部分是第一部分):

var sDate = "1212009"; 
if(sDate.length == 7){ 
    sDate = sDate.substr(0,2) + "0" + sDate.substr(2); 
} 
else if(sDate.length == 6){ 
    sDate = "0" + sDate.substr(0,1) + "0" + sDate.substr(1); 
} 

// This part can be done with Regular Expressions, as shown in other comments 
var month = parseInt(sDate.substring(0,2)); 
var day = parseInt(sDate.substring(2,4)); 
var year = parseInt(sDate.substring(4)); 

alert(day + "/" + month + "/" year); 
// Will alert 12/1/2009 

然而, 1232009永遠是2009年1月23日,未12/03/2009

112009更改1/1/2009

10102009更改爲2009/10/10

+0

爲什麼你將字符串解析爲數字只是爲了把它們放回字符串?其次,對於所有parseInt調用,您都缺少10的基數參數。 – 2009-12-27 21:10:05

+0

如果我解析爲字符串'01'將變爲'1',這就是chobo2要求的, 秒,基數參數是沒有必要的,因爲沒有其他的值比1-9 – Harmen 2009-12-27 21:14:56

+0

如果你解析'' 08''或'09''沒有基數參數,結果將爲零。 – CMS 2009-12-27 21:31:10

相關問題