过滤对象数组,其中对象属性为日期

时间:2018-08-03 12:42:10

标签: javascript arrays object momentjs

我有一个对象数组,每个对象看起来像这样

{
   "ActionDateTime": "2018-07-31T11:07:11Z",
   "ExternalID": 3962770,
   "GrandTotal": 707.5,
   "InternalID": 52858173,
   "ItemName": "Ricciolini Pasta",
}

我需要以“ ActionDateType”等于当前月份(moment()。format('MMMM')//八月)的方式过滤该数组(也许使用moment.js)

这是我的代码:

var array = [];
      
array = data.filter(function (el) {
   var a = el.ActionDateTime
   return moment(a).format('MMMM') == moment().format('MMMM')
})
        
console.log(array)

3 个答案:

答案 0 :(得分:0)

function timeTest() {
  let dateStr = '2018-07-31T11:07:11Z'
  let dateTs = new Date(dateStr)
  let ret = dateTs.getFullYear().toString() + '.' +
            (dateTs.getMonth() + 1).toString() + '.' +
            dateTs.getDate().toString()

  console.log(ret)
}

timeTest()

我认为您可以使用javascript的api。

答案 1 :(得分:0)

您可以使用JavaScript Date来做到这一点。

由于您的ActionDateTime值采用可解析的格式,因此您可以使用Date.parse来获取时间戳。

let date = Date.parse ("2018-07-31T11:07:11Z")

要获取当前月份,可以使用new Date().getMonth ()

也将它们结合在一起,就会得到类似的东西。

let arr = [{
   "ActionDateTime": "2018-08-31T11:07:11Z", //<-- Note that i changed 07 to 08
   "ExternalID": 3962770,
   "GrandTotal": 707.5,
   "InternalID": 52858173,
   "ItemName": "Ricciolini Pasta",
}]


let tempDate 	 = new Date (); //Initialise a new Date
let currentMonth = tempDate.getMonth (); //Get the current month, from the untouched date.

let filtered = arr.filter (({ActionDateTime}) => 
tempDate.setTime (Date.parse (ActionDateTime)) && 
tempDate.getMonth () === currentMonth);
   
console.log (filtered)

正如评论中指出的那样:我更改了日期,以便过滤器在8月运行时返回一个条目。

答案 2 :(得分:0)

我已经修改了OP的代码(这确实可以正常工作,但是我需要删除对时间的依赖才能使其在这里工作)。

您所做的是正确的,但是您需要过滤当月的数据,而您要过滤上个月的数据。我添加了3个数据,上个月1个,当月2个,但去年一个。注释掉了也占这一年的收益表,不确定是否需要,但我希望它只是被忘记了。

var data = [
{
   "ActionDateTime": "2018-07-31T11:07:11Z",
   "ExternalID": 3962770,
   "GrandTotal": 707.5,
   "InternalID": 52858173,
   "ItemName": "Ricciolini Pasta",
},
{
   "ActionDateTime": "2018-08-02T11:07:11Z",
   "ExternalID": 3962770,
   "GrandTotal": 707.5,
   "InternalID": 52858173,
   "ItemName": "Ricciolini Pasta",
},
{
   "ActionDateTime": "2017-08-02T11:07:11Z",
   "ExternalID": 3962770,
   "GrandTotal": 707.5,
   "InternalID": 52858173,
   "ItemName": "Ricciolini Pasta",
}];

let array = [];
let curDate = new Date();
array = data.filter(function (el) {
   let a = new Date(el.ActionDateTime)
   //return a.getMonth() ==curDate.getMonth() && a.getYear() ==curDate.getYear()
   return a.getMonth() ==curDate.getMonth()
})
        
console.log(array)