0

我打电话是我提供的JSON响应为Microsoft格式类似这样的日期服务:格式化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))); 

它输出一个日期对象,我现在可以使用它来执行格式化使用国际化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 

格式是几乎没有在输出但具有额外的逗号,但这时如果我去掉逗号这是有点做事或做一个格式化,这不会基于本地化的工作。

我的第二个问题,有没有确定的火灾方式来获取区域设置?我试图通过用户语言或语言来检测它,但我意识到还有IE浏览器使用的浏览器语言。

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

以上是不一致的,而不是充分证明这似乎是因为例如铬,如果你已经在你的语言和输入法设置中设置多语种它拉在列表中的最后一个,当铬默认为第一个该列表并不确定其他浏览器如何处理它。

我读过其他地方使用我尝试过的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

使用时刻,你可以使用moment(String)解析你的输入。

然后,您可以使用locale()函数设置时刻语言环境,因此您可以使用format("L LTS")显示本地化日期和时间。

请注意,首先您必须更改区域设置,然后您必须创建矩对象。

这里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>

+0

我几乎完全一样的代码实现上述但我阴天的是如何检测区域给予部分到时刻设置?这是我的第二个问题。 – Lumpy

+0

@Lumpy尽量避免一次询问多个不同的问题。如果您需要知道如何获取浏览器语言环境,则已经有很多类似的问题(例如[here](http://stackoverflow.com/q/1043339/4131048))。在您的代码示例中,您指出:_does not改变语言环境的基础,所以它仍然是MM/DD/YYYY_,这就是为什么我用一个使用momentjs的工作示例给出了这个答案。 – VincenzoC