Javascript AngularJS在不同浏览器中处理日期不一致

Javascript AngularJS在不同浏览器中处理日期不一致,javascript,angularjs,datetime,Javascript,Angularjs,Datetime,我正在做一个AngularJS项目,需要处理日期和时间。我注意到,当我使用$http.get获取日期的JSON提要时,在Chrome AngularJS中会转换日期以匹配客户端时区,但在Internet Explorer中,日期没有调整,而时区信息仍然被添加,就好像它被调整成了一种可怕的方式,因为它会有效地破坏日期/时间数据 一些例子: 下面是一个数据示例: [ { "StartDate":"2014-05-21T09:30:00.000Z", "EndDate":"2014

我正在做一个AngularJS项目,需要处理日期和时间。我注意到,当我使用$http.get获取日期的JSON提要时,在Chrome AngularJS中会转换日期以匹配客户端时区,但在Internet Explorer中,日期没有调整,而时区信息仍然被添加,就好像它被调整成了一种可怕的方式,因为它会有效地破坏日期/时间数据

一些例子:

下面是一个数据示例:

[
  {
    "StartDate":"2014-05-21T09:30:00.000Z",
    "EndDate":"2014-05-21T13:00:00.000Z"
  }
]
这是一个从2014年3月21日上午9:30到2014年3月21日下午1:00的活动

如果我写一个$http.get,如下所示:

$http.get('data_source')
  .success(function(data) {

    console.log(data);

  });
我得到以下信息:

IE11:2014年12月19日星期五09:00:00 GMT+1100澳大利亚东部夏令时

Chrome:2014年12月19日星期五20:00:00 GMT+1100澳大利亚东部夏令时

Firefox:2014-12-18T22:00:00.000Z

对我来说,唯一一个看起来稍微可以通过的是Chrome——它正在转换为AEDT时区,在UTC日期的基础上增加11个小时。IE在不调整时间的情况下将时区更改为AEDT,Firefox所做的是一个谜,它似乎将日期视为UTC,然后将其向后转换为UTC


有人能确切地向我解释一下这里到底发生了什么吗?为什么会有这种差异,我怎样才能标准化日期处理?

您可以尝试调用toString方法来获取响应数据

$http.get('data_source').success(function(data) {
// if i understand you correctly and data seems is a field in your json in ISO format ~ 2014-05-21T13:00:00.000Z
    $scope.data = new Date(data).toString(); 
});

似乎它在IE、Chrome和Firefox中同样有效

我没有太多地使用Angular,所以我不能肯定地发表评论,但我想知道你是否遇到过,它是否有帮助?如果演示在您测试的所有浏览器上都能运行,那么这种行为可能是由于您在服务器端获取日期信息的方式造成的。哦,这很尴尬,但是您的链接帮助我发现了问题。我忘了我已经实现了这个解决方案,这就是破坏它的原因我修改了正则表达式。我将其设置回页面上的内容,并修复了所有三种浏览器中的问题。你是传奇人物!