【问题标题】:Why does angular date filter adding 2 to hour?为什么角度日期过滤器将 2 添加到小时?
【发布时间】:2013-08-08 08:53:55
【问题描述】:

我使用 angular 'date' 过滤器在 Angular js 中创建了一个持续时间计时器。 出于某种原因,小时部分以“2”而不是“0”开头。

我正在使用这样的过滤器

 {{runningDuration | date:'HH:mm:ss'}}  

http://jsfiddle.net/rpg2kill/vNdpu/

我做错了什么?

【问题讨论】:

  • 当我运行 JSFiddle 时,小时从 0 开始,而不是 2。
  • 我用四台电脑检查了 IE、Crome 和 FireFox。问题依然存在。你知道可能是什么原因吗?
  • 我只是在猜测......也许它可能与时区有关。
  • 不只是地区/时区问题吗?当我查看它时,它从 1h 开始,如果您将格式更改为 date:'HH:mm:ss Z',我想您会在该时间后看到类似 -0200 的内容,这意味着您处于 UTC 时间,我在 -0100,并且我认为澳大利亚有些人应该有-1000
  • 你是对的,它是时区。有没有办法在没有本地时区的情况下使用“日期”过滤器?

标签: angularjs


【解决方案1】:

这是因为您想格式化日期,但将日期之间的差异作为整数传递给它。然后 Angular 假设你想要new Date(runningDuration)

您可以使用过滤器将日期转换为 utc(这可能需要更多的极端情况处理,而不仅仅是数字和日期)。 Demo

JS

myApp.filter('utc', [function() {
    return function(date) {
      if(angular.isNumber(date)) {
        date = new Date(date);
      }
      return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(),  date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
    }   
  } ]);

HTML

{{runningDuration | utc | date:'HH:mm:ss'}}

【讨论】:

    猜你喜欢
    • 2017-06-21
    • 2015-12-17
    • 2021-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多