2013-04-14 29 views
1

我是的全新產品Javascript,我從milliseconds創建Date時遇到問題。在Javascript中創建日期()時發生錯誤

我有這樣的代碼:

function (result) { 

    alert("Retreived millis = " + result.created); 
    //Prints "Retrieved millis = 1362927649000" 

    var date = new Date(result.created); 
    alert("Created Date = " + date); 
    //Prints "Created Date = Invalid Date" 

    var current = new Date(); 
    var currentDate = new Date(current.getTime()); 
    alert("Current Date = " + currentDate); 
    //Prints "Current Date = Sun Apr 14 2013 12:56:51 GMT+0100" 
} 

最後警報證明的Date創建工作,但我不明白爲什麼沒有被正確地創建了第一個Date,因爲檢索millis是正確的...並且據我所知在JavaScript中沒有數據類型,所以它不能失敗,因爲檢索到的millisstringlong,對吧?

回答

2

我懷疑result.created是一個字符串。由於Date構造函數接受字符串,但期望它們的格式不同於此,所以它會失敗。 (例如,new Date("1362927649000")導致一個無效的日期,但new Date(1362927649000)給我們Sun Mar 10 2013 15:00:49 GMT+0000 (GMT)。)

這應該對其進行排序(通過轉換爲數字第一,這樣的構造知道它在處理毫秒自大紀元):

var date = new Date(parseInt(result.created, 10)); 
+0

它解決了這個問題。我認爲,如果你傳遞一個整數或一個字符串,Javascript就不會抱怨......正如我所說的,我對這個完全陌生...... Thanx很多! – MikO

+1

@MikO:JavaScript會做很多自動的字符串到數字的轉換,但是恰巧'Date'構造函數接受* *字符串或數字,所以它不會觸發自動轉換。相反,它會查看它有什麼和分支,或者以給定格式解析字符串,或者使用數字。如果函數* only *允許數字,則賠率很高,它會很樂意爲您自動轉換字符串(例如'Math.max(10,「100」)'returns'100')。只是不是'Date'構造函數。 :-) –

+0

好的,我現在清楚明白了。非常感謝解決方案和額外的信息。 – MikO

相關問題