根据区域设置

时间:2017-05-02 21:19:17

标签: javascript localization momentjs datetime-format date-parsing

我正在调用的服务是以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

我不确定我是否错过了一些愚蠢的事情,或者是否有更好的方法来做到这一点?感谢

1 个答案:

答案 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);
}