【问题标题】:OrderBy Date values, which are just strings in Angular JSOrderBy 日期值,它们只是 Angular JS 中的字符串
【发布时间】:2014-10-07 23:55:09
【问题描述】:

我正在尝试按日期排序一些数据,尽管日期只是字符串,格式为 dd-mm-yyyy。

我做了一个过滤器,它转换了纯数字字符串(在美国日期格式中,我想要英国日期格式),例如 01272012 到 27-01-2014,但是当我尝试订购它们时,它仍然只有将它们视为数字字符串,因此 01-01-1990 将出现在 02-01-2014 之前。

关于如何在过滤器中执行此操作的任何建议?

谢谢!

更新

我发现如果日期格式是 yyyy-mm-dd,日期会自动排序。然后我使用orderBy:['date'] 对数据进行排序,仅在显示数据时使用我原来的过滤器。

我最终不得不反转我的数据,显示最近的日期。为此,我在 orderBy 语句中添加了 -orderBy:['-date']

【问题讨论】:

    标签: javascript angularjs date angularjs-orderby


    【解决方案1】:

    因为orderBy 过滤器,您可以使用它。 您的 ng-repear 可能看起来类似于:

    ng-repeat="item in items | orderBy: orderByDate"
    

    然后在您的控制器上定义orderByDate 函数:

    $scope.orderByDate = function(item) {
        var parts = item.dateString.split('-');
        var date = new Date(parseInt(parts[2], 
                            parseInt(parts[1]), 
                            parseInt(parts[0]));
    
        return date;
    };
    

    功能的实现取决于您。我选择从字符串创建Date。从orderByDate 函数返回的对象然后使用 运算符进行排序。

    编辑::reverse的解决方案

    由于:reverse 不能与作为参数传递的函数一起使用,您可以实现自定义函数以返回反转值本身。在这种情况下使用Date 是不可能的,我会构造一个数字然后用减号返回它:

    $scope.orderByDate = function(item) {
        var parts = item.dateString.split('-');
        var number = parseInt(parts[2] + parts[1] + parts[0]);
    
        return -number;
    };
    

    【讨论】:

    • 太棒了,我想我已经成功了。我的设置略有不同 - 我将一个参数传递给你自己建议的 orderByDate 函数,如何反转它?在方法之后使用 ':reverse' 时出现错误。
    • 我明白了,:reverse 在传递函数时不起作用。我建议构造一个number 而不是Date 并用减号返回它。将更新我的答案
    • 在底部更新了:reverse 的解决方案。
    • 感谢您详细而迅速的回复。我发现如果日期按年-月-日排序,那么数字将自动按正确的顺序排序,因此日期 19990812 将在 20000912 之前。我刚刚在这些上应用了我的原始过滤器以显示它们如何我想要,但我所要做的就是:orderBy:['-date']。再次感谢。
    【解决方案2】:

    var now = Date.now(); now = $filter('date')(now, 'yyyy-MM-ddThh:mm:ss+hh:mm');

    然后你可以用相应的格式化日期进行数据过滤

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-03
      • 2015-04-22
      相关资源
      最近更新 更多