javascript - 在 Javascript 中过滤日期

标签 javascript jquery string typescript date

我正在尝试过滤包含大于特定日期的日期(从字符串转换)的数组。

_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/

相关文章:

javascript - 如何使用 PHP 或 JavaScript 根据地理位置或 IP 将访问者重定向到另一个站点?

c - 在C中获取UTF-8的字符串长度?

c - 当 scanf ("%s",s) 时会发生什么?遇到两个或多个词而只提供一个变量?

string - 在 C++ 中使用 String^ 添加新行

javascript - 如何检测tinymce 4中菜单何时呈现?

javascript - D3过渡,margin-top进展不顺利

javascript - JQuery 中的点击事件没有响应

javascript - 勾选复选框时如何更改 JSON 键的值?

javascript - ul li a affecting ul li ul li a

javascript - Activity 菜单选项卡下的滑动箭头