查找日期在时间范围内失败

时间:2017-05-01 13:49:16

标签: javascript momentjs

我有这个对象数组

[
  {
    "date_from": "2017-04-29 00:00:00",
    "date_to": "2017-05-02 23:59:59",
    "username":"john"
  },
  {
    "date_from": "2017-04-04 00:00:00",
    "date_to": "2017-04-08 23:59:59",
    "username":"james"
  },
  {
    "date_from": "2017-04-29 00:00:00",
    "date_to": "2017-05-02 23:59:59",
    "username":"jacob"
  }
]

我想渲染一些日历,但第一步是消除超出范围的日期。

我试过这个功能

function isDateWithinRage(date) {
    const when  = moment(date, 'YYYY-MM-DD');
    console.log(when);
    const range = moment.range('2017-04-01','2017-04-30');

    return when.within(range);
}

然后我过滤了arr:

filter(arr, obj => isDateWithinRage(obj.date_from)) // returned empty [], why?

我的代码有什么问题吗?我无法找到答案。

3 个答案:

答案 0 :(得分:1)

从文档中,似乎范围限制必须是moment对象。

https://github.com/gf3/moment-range#create

function isDateWithinRage(date) {
    const when  = moment(date, 'YYYY-MM-DD');
    const start = moment('2017-04-01', 'YYYY-MM-DD');
    const end   = moment('2017-04-01', 'YYYY-MM-DD');
    const range = moment.range(start, end);
    return when.within(range);
}

var filteredData = arr.filter((obj) => isDateWithinRage(obj.date_from))

答案 1 :(得分:1)

设置变量:

//date to check
  let date = '2010-10-20';
//range
  let start = '2010-10-19';
  let end= '2010-10-25';

如果使用2.9.0及更高版本的moment.js,请使用以下代码:

return moment(date).isBetween(start, end);//returns true

如果使用以前的版本,请使用此:

if(date.diff(start) >= 0 && date.diff(end) <= 0) {
  result = true;
}

答案 2 :(得分:0)

请尝试此解决方案。

function isDateWithinRage(date1,date2) {
if( moment("date1", "date format").diff(moment("date2", "date format"))
            >=0) {
                //Put your logic here
            }

如果您进一步询问,请与我们联系。