自定义日期过滤器角度JS

时间:2016-03-03 22:47:12

标签: javascript angularjs unix-timestamp angularjs-filter

我是angularJS的新手,所以一点点帮助真的会被贬低:)

我有这个Json数据

"map": {
    "someData": "someContent",
    "date": "1456733442000"
},
"map": {
    "someData": "someContent",
    "date": "1456733442000"
},
..... and so on

有了这个,我的客户需要一些过滤器来显示所有文件,例如在2015年12月(没有烦扰日和小时)

到目前为止,这是我的自定义过滤器:

angular.module('files').filter('FilterByDate', function() {

return function(items, year, month, day) {

    var filtered = [];

    if (year=== undefined || month == undefined || day == undefined) {

        return items

    } else if  (year === "all" && month == "all" && day == "all"){

        return items

    } else

        {

            month = month -1;

            var subDate = new Date(year,month,day);

            for (var i = 0; i < items.length; i++) {

                var fileDate = new Date(items[i].map.date);

                fileDate.setHours(0,0,0,0);

                if (fileDate.getTime() == subDate.getTime()) {

                   filtered.push(items[i]);

                }

            }

        }
        return filtered;

      };

    });

正如你所看到的,这个过滤器确实有效,但它并没有真正做到我想做的事情。例如,只能过滤年份的可能性,将其余的过滤器保留为“全部”

如果您需要更多详细信息,请与我们联系。我很乐意回答您。

更新:

使用感谢Alon Eitan更好更简单!

    angular.module('Interfaces').filter('FilterByDate', function() {

  return function(items, annee, mois, jour) {

    var filtered = [];

    if (year === undefined || month == undefined || day == undefined) {

      return items

    } else if  (year === "all" && month == "all" && day == "all"){

        return items

    } else

            {

            var controlJour;

            //If the day is set as "all" we add 01 so moment() can handle it

            if (day == "all") {

                day = "01";

                controlJour = false;

            } else {

                controlJour = true;

            }

            month = month -1;

            var subDate = new Date(annee,mois,jour);

            //we loop trought the data

            for (var i = 0; i < items.length; i++) {

                var fileDate = new Date(items[i].map.date);

                //erase the hours seconds a milli for prevent conflicts

                fileDate.setHours(0,0,0,0);

                //if the date of the file cames after the chosen date AND it's from the same year AND the same month we continue

                if (moment(fileDate).isSameOrAfter(subDate) && moment(fileDate).isSame(subDate, 'year') && moment(fileDate).isSame(subDate, 'month')) {   

                    if (controlJour == false) {

                        filtered.push(items[i]);

                    } else if (moment(fileDate).isSame(subDate, 'day')) {

                        filtered.push(items[i]);

                    }

              }

            }
        }

    return filtered;

  };

});

0 个答案:

没有答案