我正在尝试过滤包含大于特定日期的日期(从字符串转换)的数组。
_this.downloadData.forEach(_d => _d.LogTime = _d.LogTime.toString());
console.log(_this.downloadData.filter(x=>new Date(x.LogTime) > new Date('3/11/2019 7:29:12 AM')));
But filter always return zero items
.
数组如下所示:
[0 … 99]
0:
CPUStat:""
Connectivity:""
DiskStatus:""
HostName:"HOSTname"
LastRebootStatus:null
LogTime:"Mon Mar 11 2019 07:39:12 GMT+0530 (India Standard Time)"
__proto__:
Object
最佳答案
这里的大部分问题都是日期时间格式不符合 ISO 8601 标准。因此,您需要清理日期。 LogTime.substring(4,23) + obj.LogTime.substring(28,33)
将从字符串中获取重要部分。然后您可以使用 moment.js
( https://momentjs.com ),这是在 JavaScript 中处理时间所必需的。
您可以运行下面的代码并查看它是否有效
// Your example time array
let timeArray = [
{ LogTime:"Mon Mar 11 2019 07:39:12 GMT+0530 (India Standard Time)" },
{ LogTime:"Mon Mar 11 2019 08:39:12 GMT+0530 (India Standard Time)" },
{ LogTime:"Mon Mar 11 2019 09:39:12 GMT+0530 (India Standard Time)" },
{ LogTime:"Mon Mar 11 2019 10:39:12 GMT+0530 (India Standard Time)" }
],
format = "MMM MM YYYY HH:mm:ssZ",
shouldBeAfter = moment('Mar 11 2019 09:00:12+0530', format),
result,
filterDateGreaterThan = function (obj){
let sDate,
mDate;
sDate = obj.LogTime.substring(4,23) + obj.LogTime.substring(28,33);
mDate = moment(sDate, format);
// console.log(mDate);
return mDate.isAfter(shouldBeAfter);
};
result = timeArray.filter(filterDateGreaterThan);
console.log(result);
<script src="https://momentjs.com/downloads/moment.min.js"></script>
不使用 Moment.js 时的代码
// Your example time array
let timeArray = [
{ LogTime:"Mon Mar 11 2019 07:39:12 GMT+0530 (India Standard Time)" },
{ LogTime:"Mon Mar 11 2019 08:39:12 GMT+0530 (India Standard Time)" },
{ LogTime:"Mon Mar 11 2019 09:39:12 GMT+0530 (India Standard Time)" },
{ LogTime:"Mon Mar 11 2019 10:39:12 GMT+0530 (India Standard Time)" }
],
shouldBeAfter = new Date('Mar 11 2019 09:00:12+0530'),
result,
filterDateGreaterThan = function (obj){
let sDate,
date;
sDate = obj.LogTime.substring(4,23) + obj.LogTime.substring(28,33);
date = new Date(sDate);
return date.valueOf() > shouldBeAfter.valueOf();
};
result = timeArray.filter(filterDateGreaterThan);
console.log(result);
关于javascript - 在 Javascript 中过滤日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55101818/