2012-06-05 287 views
1

我在初始化JavaScript日期對象時面臨一個奇怪的問題,無論我初始化爲什麼顯示日期爲1 Jan 1970 05:30;使用javascript日期對象問題

這是我嘗試初始化

var d=new date(27-02-1989); 

警報「d」表示1970年1月1日.....,也有時需要從數據庫中但在格式毫米/過去的日期的方式dd/yyyy不是我想要的格式即dd/mm/yyyy

這個問題突然出現了,因爲前幾天一切都很順利,但是今天打開項目後(今天兩天後)這個問題讓我很不舒服

+0

1970年1月1日是unixtime的起點 - 通常是一個跡象表明,事情正在評估爲零或假 - 在控制檯中嘗試新的日期(假) – Ken

+0

你試過日期(「27-02-1989」 ); ? – Gustav

+0

是的報價工作,但它仍然需要的格式爲mm/dd/yyyy我該如何改變這種情況? – Snedden27

回答

1
// Transform your european date in RFC compliant date (american) 
var date = '27-02-1989'.split('-').reverse().join('-'); 

// And this works 
var d = new Date(date); 

證明:

Proof

+0

報價工作,但你能告訴我如何得到我原來的默認格式回來,即dd/mm/yyyy – Snedden27

+0

恩?我認爲這是原始格式?我不確定這是你需要的,但是這裏是:''1989-02-27'.split(' - ')。reverse()。join(' - ');'。我強烈建議你理解這段代碼的作用。 –

+0

是的,我得到了工作與字符串,謝謝,是的這是原始格式,有人可能已經改變了區域設置,這就是爲什麼我得到mm.dd.yyyy作爲默認 – Snedden27

1

根據here你可以試試:

new Date() 
new Date(milliseconds) 
new Date(dateString) 
new Date(year, month, day [, hour, minute, second, millisecond ]) 

所以對於你的情況下使用(編輯:你需要記住的月份是從零開始的)

var d = new Date(1989,01,27); 

認罪聲明 - 使用Date(資本d)

+3

你需要記住,月份是基於零:新日期(1989,02,27)將給他3月27日,而不是2月 – Ken

1

你使用負整數值(27-02-1989 == -1964)進行初始化。 Date對象的構造函數的參數列表爲here

如果您想傳遞字符串,則需要採用符合RFC2822的格式(請參閱here)。

+0

錯誤的參考,ISO8601是唯一格式在[ES5](http:// es5。 github.com/#x15.9.1.15),但它並不支持所有常用瀏覽器。 ECMAScript ed3沒有指定任何格式,而是依賴於實現。 – RobG

+0

謝謝,你說得對。我沒有自己驗證其他格式。這可能是將輸入字符串解析爲數字並將其用於構造函數的最好方法。 –

0

的所有

var d=new date(27-02-1989); 

一是完全以在JavaScript錯誤的表達,而且即使我們更正確地重寫它:

var d=new Date('27-02-1989'); 

沒有辦法在js中原生解析這個日期字符串。

這裏解決方案,您可以嘗試:

  • 變換字符串ISO8601:YYYY-MM-DD,這可以通過最現代的broswers進行解析,也可以使用很多JS庫填充工具
  • 分割字符串字符串由「 - 」,然後使用日期構造函數new Date(year, month-1, day)
  • 分割字符串,並使用setDate, setMonth, setYear方法上new Date()對象

    注意,在最後兩個你需要方法從本月中扣除1,因爲月是從零開始(0代表1月11日,十二月)

2

我看你已經接受一個答案,但它是不是最好的你可以做。沒有一種格式可以被所有常用瀏覽器正確解析,至少在IE 8中接受的答案會失敗。

將字符串轉換爲日期的唯一安全方法是解析它,例如,

var s = '27-02-1989'; 
var bits = s.split('-'); 
var date = new Date(bits[2], --bits[1], bits[0]); 
+0

+ 1 for'--bits [1]',好的把戲! –