我正在调用的服务是以json响应的形式向我提供日期,如下所示:
"\/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)));
它输出一个日期对象,我现在可以使用它来使用Internationalization 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
我确实看到了关于此问题的一个问题,但它已经过时了。 https://github.com/moment/moment/issues/1044
我不确定我是否错过了一些愚蠢的事情,或者是否有更好的方法来做到这一点?感谢
答案 0 :(得分:0)
使用片刻,您可以使用moment(String)
解析输入。
然后,您可以使用locale()
功能设置时刻区域设置,这样您就可以使用format("L LTS")
显示本地化的日期和时间。
请注意,首先您必须更改区域设置,然后必须创建时刻对象。
以下是var visits = {
'Mike': {
visits: 1
},
'Roland': {
visits: 2
},
'Chiks': {
visits: 3
},
'Rols': {
visits: 4
}
};
var num=['zero','one','two','three','four','five']
function hi(firstname) {
if (Object.keys(visits).includes(firstname)) {
console.log(num[visits[firstname].visits])
} else {
console.log('welcome')
}
}
hi('Chiks');
hi('new')
和en-gb
区域设置的示例代码:
en-us
var input = "\/Date(1458845940000)\/";
function changeLang(value){
moment.locale(value);
var res = moment(input).format("L LTS");
$("#result").html(res);
}