today1 = new Date();
today2 = Date.parse("2008-28-10");
要比較這些我的時間(毫秒)值,我必須做以下事情,因爲today2只是一個數字。爲什麼Date.parse不返回Date對象?
if (today1.getTime() == today2)
這是爲什麼?
today1 = new Date();
today2 = Date.parse("2008-28-10");
要比較這些我的時間(毫秒)值,我必須做以下事情,因爲today2只是一個數字。爲什麼Date.parse不返回Date對象?
if (today1.getTime() == today2)
這是爲什麼?
要回答這個問題在標題:因爲他們決定這樣創建的JavaScript時語言。可能是因爲Java的java.util.Date
解析函數做了同樣的事情,並且他們想模仿它的行爲以使語言更加熟悉。
要回答這個問題在文本...使用此結構來獲得兩個日期對象:
var today2 = new Date(Date.parse("2008-10-28"));
編輯:一個簡單的
var today2 = new Date("2008-10-28");
也適用。
注意 Internet Explorer(即JScript)不能理解日期字符串中的破折號。它適用於斜槓,但:
var today2 = new Date("2008/10/28");
如果我沒記錯的話,Date會給你一個值,直到你創建Date對象的毫秒。因此,除非此代碼在00:00:00:00在2008年8月10日完全運行,否則它們將不會相同。
只是一個補充:根據定義Date.parse()返回一個long值,表示Date的毫秒值,而不是Date對象本身。如果你想保持Date對象本身,只是建立它像這樣:
var newDate = new Date();
newDate.setFullYear(2008,9,28);
更多參考退房:the Date class reference
這並沒有回答原來的問題,其中 - 爲什麼是從Date.parse返回的類型,是一個整數,而不是Date?'。我也不知道這個答案,但拒絕提供不正確答案的機會作爲替代 – belugabob 2008-10-28 09:29:41
就像我添加的那樣,Date.parse by def返回毫秒值,請參閱我鏈接到的參考... – 2008-10-28 09:39:59
Data.parse返回的是NaN。其中fundementally是一個不確定的數字。這是大多數實現在無法將字符串轉換爲日期時返回的內容。有些實現不支持除符合日期字符串(這是規範要求的所有內容)的任何內容。
編輯:此答案的評論指出Date.parse不返回NaN。然而規範說解析應該返回一個數字。給定一個不能作爲日期解析的字符串時,它應該返回什麼數字?它不能使用0或者-1或者其他一些'流氓'值,因爲1970年1月1日這個有效的毫秒偏移。Mozilla和IE都返回NaN,這是一個非常明智的做法。
儘管規範並不排除將字符串(如「2008-28-10」)解析爲有效日期,但並不需要它。我還沒有遇到過任何超出規範要求的實現。因此,「2008年10月10日」是最接近上面的字符串,將正確解析。
我無法代替語言設計人員回答,但可以使用Date構造函數中Date.parse或Date.UTC的結果來獲取此類對象。
請注意,您的代碼示例不正確:它不是有效的日期格式,不是ISO(yyyy-mm-dd)或IETF(星期一,1995年12月25日13:30:00 GMT + 0430)。所以你會得到一個NaN。 Date.parse只理解IETF格式,從我在MDC上讀到的內容。
如果您需要比較兩個日期,您可以比較.getFullYear(),.getMonth()和.getDay()的結果,或者僅比較所需級別的字符串表示。
var d1 = new Date();
var n = Date.parse("28 Oct 2008");
var d2 = new Date(n);
var d3 = new Date("28 october 2008");
alert(d1.toDateString() == d2.toDateString());
alert(d2.toDateString() == d3.toDateString());
這是什麼問題?爲什麼你需要一步到位呢?有什麼業務需要嗎? – mohammedn 2011-02-08 02:33:25
我的問題是,我和其他人一樣,會期望一個對象的解析方法返回該方法被調用的類型的對象。 – ProfK 2011-02-08 02:33:25