2016-05-31 114 views
0

我有一個字符串進入函數,這個字符串是來自瑞典的日期,格式爲2016 maj 01。傳入此函數的是國家/地區代碼sv-se。我需要將日期字符串轉換爲有效的日期對象,然後可以應用該語言環境。Javascript語言環境日期轉換

這是用於全局日期驗證。

到目前爲止,我已經

var date = new Date(); 
Intl.dateTimeFormat(locale, options).format(date); 

我希望能夠有new Date("2016 maj 01")然而,因爲這不是英語,這是一個無效的日期。我可以使用區域設置將其轉換爲有效的日期對象嗎?

有人建議我的問題與另一個類似。我的問題不同的方式是,我有月份縮寫名稱。如果月份顯示數字這不會是一個問題

+0

[JS的可能重複:新的Date()不接受日期字符串在我自己的語言環境(d/M/y)](http://stackoverflow.com/questions/7165483/js-new-date-is-not-accepting-date-string-in-my-own-locale-dmy) –

+0

不幸的是,我的月進來作爲一個縮寫字符串不是數值(maj不是5) –

回答

1

正如我所評論的,這可能是一個現有問題的重複。 JavaScript日期對象不能從本地化字符串構建。

但是,你婉從瑞典使自己的日期建設者:

Date.fromSwedish = (function() { 
 
    var months = { 
 
    'jan': 0, 
 
    'feb': 1, 
 
    'mar': 2, 
 
    'apr': 3, 
 
    'maj': 4 /*...*/ 
 
    }; 
 

 
    return function(s) { 
 
    var splitted = s.split(' '); 
 
    var year = splitted.length > 0 ? splitted[0] : 1970; 
 
    var month = splitted.length > 1 ? months[splitted[1].toLowerCase()] : 0 ; 
 
    var day = splitted.length > 2 ? splitted[2] : 1; 
 
    return new Date(year, month, day); 
 
    }; 
 
}()); 
 

 
document.write(Date.fromSwedish("2016") + "<br/>"); 
 
document.write(Date.fromSwedish("2016 feb") + "<br/>"); 
 
document.write(Date.fromSwedish("2016 maj 01") + "<br/>");

+0

這看起來不錯,問題是我需要丹麥,芬蘭和挪威以及它。我希望有一個全球性的解決方案。 –

+0

恐怕你將不得不爲其他語言實現自己的版本,或者找到一個有用的全球化圖書館 –

0

我認爲你正在試圖做的方法Date.prototype.toLocaleDateString相反(),它根據傳入的Locale和options參數返回格式化的字符串。你可以閱讀更多關於它here

現在,在這裏,你想要做的toLocaleDateString方法做什麼,你想給一個格式化的日期字符串用語言環境的對面,你希望它返回一個日期對象。爲此,您可以查詢this post,我希望它能幫助您取得領先。

另外,如果你是舒適的使用外部庫,那麼你可以探索本地化庫,例如moment.js

+0

,但我仍然有我的日期有一個名稱的問題。我的日期不純粹是數字。 –

相關問題