將日期轉換爲字符串和字符串爲日期時,在JavaScript中獲得一些不一致的結果。正如評論中所指出的,這段代碼似乎很奇怪:日期轉換拼圖
// Start with a string literal
var s1 = "10/31/2014";
// Convert string to date
var f1 = s1.split("/");
var d1 = new Date(f1[2], (f1[0] - 1), f1[1]);
alert("Date from string: " + d1); // works
// Convert that date to a string
a1 = (d1.toLocaleString("en-US")).split(" ", 1);
alert("Array[0] from split: " + a1[0]); // works
s2 = a1[0];
alert("String from Array[0] assignment: " + s2);
// Convert string to date (identical to before)
var f2 = s2.split("/");
var d2 = new Date(f2[2], (f2[0] - 1), f2[1]);
alert("Date from String: " + d2); // fails: "Invalid date"
任何人都知道爲什麼這個字符串不是字符串?
順便說一句,改變
s2 = a1[0];
到
s2 = a1[0].toString();
,而可以預見改變不了什麼。想法?
http://jsfiddle.net/pfvh6fed/1/
我在Chrome上運行它,你100%正確。 Chrome在2014年後返回逗號,而IE沒有。奇怪的是,這不是bug。在IE上試用它,它沒有逗號,它仍然不起作用。我可能會漏掉一些明顯的東西,但我認爲它應該像IE一樣沒有逗號。 – Samene 2014-11-01 00:14:59
好的,經過很多調試,我確定IE中有一個bug。當您製作數據字符串時,出於某種原因,在此處指出日期中每個數字的任一側。 '* 14 */* 08 */* 2014 *'有一個char code爲'8206'的幻影字符。這個字符搞砸了IE的parseInt()函數,這是字符串到日期轉換的一部分。你給它一個字符串,它會嘗試創建一個int,但由於這兩個字符而失敗。這可以通過正則表達式替換來解決,但最好用@ Jofre的答案。 – MarshallOfSound 2014-11-01 01:04:09
這可以通過提醒日期字符串'a1 [0]'的長度來證明,您會看到它比可見的長6個字符。那是因爲IE爲這個愚蠢的理由而設置的6個'phanton'角色。 – MarshallOfSound 2014-11-01 01:05:07