【问题标题】:Angular date filter not working with milliseconds (string or number)角度日期过滤器不适用于毫秒(字符串或数字)
【发布时间】:2017-01-12 16:50:14
【问题描述】:

我的看法是这样的:

{{1288323623006 | date:'%d/%m/%Y %I:%M:%S %p'}}

但它会在我的控制台中引发如下错误:

当我将毫秒转换为控制器中的日期对象时,如下所示:

$scope.myDate = new Date(1288323623006);

在我看来:

{{myDate  | date:'%d/%m/%Y %I:%M:%S %p'}}

然后它按预期显示29/10/2010 06:40:23 AM

这是来自Angular Docs 的示例,它在我的控制台中引发了上述错误。

我可以将日期转换为对象并将其传递给视图,但我有兴趣以这种方式管理它,因为我不想使用这样的修复。

我没有更改我的 I18nAdapter 中的任何内容。

有人遇到过类似的问题吗?

【问题讨论】:

    标签: javascript angularjs date angularjs-filter


    【解决方案1】:

    您可以制作一个自定义过滤器并将其与您的值一起使用,如下所示:

    过滤器:

    .filter('millisecondsToDate', function($filter) {
      return function(millseconds) {
        var timeString = $filter('date')(new Date(millseconds),'d/M/yyyy HH:mm:ss a');
        return timeString;
      };
    })
    

    HTML:

    {{ 1288323623006 | millisecondsToDate }}
    

    这将输出29/10/2010 06:40:23 AM

    编辑:

    其实这也可以:

    {{ 1288323623006 | date: 'd/M/yyyy HH:mm:ss a' }}
    

    所以您只是日期格式错误,这就是 Angular 无法将其转换为日期的原因。

    请查看documentation for AngularJS date了解正确的格式。

    这是一个 JSFiddle:https://jsfiddle.net/thepio/qrr451pk/

    编辑 2:

    对于 i18n,您是否尝试过以下操作?

    {{ 1288323623006 | date:'short'}}
    

    或使用自定义格式:

    {{ 1288323623006 | date:'d/M/yy h:mm:ss a' }}
    

    【讨论】:

    • 我阅读了文档。这不是格式。我也试过你的格式。我说过,当一个对象传入要过滤(格式化)的视图中时它工作正常,但是当经过毫秒时它不起作用
    • 但它确实工作得很好。请参阅此 JSFiddle:jsfiddle.net/thepio/qrr451pk
    • 我知道它在小提琴上完美运行,我什至在问题中加入了一个。问题是本地化库出现了一些问题,因此视图中传递的毫秒数没有被格式化
    • 它不起作用。我会尝试自定义过滤器,但即使它有效,我仍在寻找问题的根源,而不是解决方法
    • 是的,您的应用程序中似乎还有其他问题。这可能是调试任务,需要查看完整的代码,所以我想我真的帮不了你。对此感到抱歉。
    【解决方案2】:

    我最近解决了这个问题,现在我发布我的解决方案。

    原来 Angular 的过滤器不起作用,因为使用了本地化过滤器。

    我所做的是通过在我们的 i18n.js 库中注释这些行来禁用本地化日期过滤器:

    angular.module('app.filters.I18nAngular', []).filter('translate', function() {
       return function(key, obj) {
          return i18nAdapter.translate(key, obj);
       };
    }).filter('number', function() {
       return function(value, options) {
          return i18nAdapter.formatNumber(value, options);
       };
    }).filter('currency', function() {
       return function(value) {
          return i18nAdapter.formatCurrency(value);
       };
    });
    // .filter('date', function() {
    // return function(value, format) {
    // return i18nAdapter.formatDate(value, format);
    // };
    // });
    

    i18nAdapter 有自己的格式和过滤器,类似于 angular,但在我们的例子中,我们可以使用 angular 提供的那些。

    【讨论】:

      【解决方案3】:

      因为您正在尝试解析非日期对象。您需要向过滤器传递一个 Date 对象,就像您在控制器中所做的那样。你应该这样做:

      {{new Date(1288323623006) | date:'%d/%m/%Y %I:%M:%S %p'}}
      

      【讨论】:

      • 在文档中说您可以将毫秒作为搅拌/数字或日期对象传递。您可以在 questoin 中的 plunkr 示例中看到它的实际效果
      猜你喜欢
      • 2018-12-22
      • 2015-07-24
      • 2014-05-24
      • 2015-12-15
      • 1970-01-01
      • 1970-01-01
      • 2012-08-11
      • 2023-03-21
      • 2017-03-10
      相关资源
      最近更新 更多