我是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;
};
});