簡體   English   中英

將JSON日期格式化為基於語言環境的格式化日期

[英]Formatting a JSON date to a formatted date based on locale

我正在調用的服務以json響應的形式為我提供日期,為Microsoft格式,如下所示:

"\/Date(1458845940000)\/"

我一直在尋找最好的方法來處理它,並在javascript中將其正確轉換為本地日期時間。
我想格式化它,例如

en-US locale "MM/DD/yyyy HH:mm:ss a" -> 3/24/2016 3:59:00 PM
en-GB locale "DD/MM/yyyy HH:mm:ss"   -> 24/03/2016 15:59:00

第一個問題是嘗試將給定的字符串格式轉換為日期。 我已經解決了使用它的問題,並且似乎可行,但是我不確定這是否是最好的方法。

var jsDate = new Date(parseInt(jsonDate.substr(6)));

它輸出一個日期對象,我現在可以使用它來使用國際化API進行格式化。 然后,我可以使用有時是正確的語言環境(稍后再講)來生成日期:

var jsDate = new Date(parseInt(jsonDate.substr(6)));
var locale = window.navigator.userLanguage || window.navigator.language;
jsDate.toLocaleString(locale);  //3/24/2016 3:59:00 PM or  24/03/2016, 15:59:00

格式幾乎在輸出中存在,但帶有額外的逗號,但是如果我去除逗號,這樣做會有點兒麻煩,或者會做基於本地化的重新格式化。

我的第二個問題,是否有肯定的方式來獲取語言環境? 我嘗試通過userLanguage或語言檢測到它,但是我意識到IE也使用了browserLanguage。

var locale = window.navigator.userLanguage || window.navigator.language;

上面的內容不一致,並且不能完全證明,因為例如在chrome中,如果您在“語言和輸入設置”中設置了多種語言,則當chrome默認為列表中的第一個時,它將拉出列表中的最后一個,而不確定其他瀏覽器會處理它。

我已經讀過其他地方使用momentjs,嘗試通過包括moment.min.js和moment-with-locales.min.js來使用。 但這也行不通:

var jsDate = new Date(parseInt(jsonDate.substr(6)));
var locale = window.navigator.userLanguage || window.navigator.language;
moment.locale(locale);
var newDate = moment(jsDate).format("L LTS") //03/24/2016 3:59:00 PM but does not change base on locale so it remains MM/DD/YYYY ... even though I changed locale

我的確在momentjs中看到了一個與此相關的問題,但是它已經比較老了。 https://github.com/moment/moment/issues/1044

我不確定我是否缺少一些愚蠢的東西,或者是否有更好的方法來做到這一點? 謝謝

使用moment,可以使用moment(String)解析輸入。

然后,您可以使用locale()函數設置時刻的語言locale() ,因此可以使用format("L LTS")顯示本地化的日期和時間。

請注意,首先必須更改語言環境,然后才能創建moment對象。

以下是en-gben-us語言環境的示例代碼:

 var input = "\\/Date(1458845940000)\\/"; function changeLang(value){ moment.locale(value); var res = moment(input).format("L LTS"); $("#result").html(res); } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment-with-locales.min.js"></script> <select onchange="changeLang(value)"> <option value="en">en</option> <option value="en-gb">en-gb</option> <option value="en-us">en-us</option> </select> <div id="result"></div> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM