如何比较两个日期与momentJS忽略年份值?

时间:2015-11-14 04:42:17

标签: javascript datetime momentjs

假设一个学期从2015年11月1日到2016年1月3日开始。比较的样本日期如下('YYYY-MM-DD'):

2015-10-12 = false
2015-11-01 = true (inclusive)
2015-12-20 = true
2015-01-03 = true (inclusive)
2016-01-30 = false
2017-11-21 = true (year is ignored)
2010-12-20 = true (year is ignored)

有没有办法可以用MomentJS实现这个结果?

2 个答案:

答案 0 :(得分:1)

可以使用isBetween,但有点混乱。

function isWithinTerm(dateString) {
  var dateFormat = '____-MM-DD', // Ignore year, defaults to current year
      begin = '2015-10-31', // Subtract one day from start of term
      end = '2016-01-04', // Add one day to finish of term
      mom = moment(dateString, dateFormat); // Store to avoid re-compute below
  return mom.isBetween(begin, end) || mom.add(1, 'y').isBetween(begin, end);
}

我加入一年作为可选支票的原因仅在于自2015年1月以来的1月份案例显然不是在2015年11月到2016年1月之间。我知道这有点hacky,但我想不出任何更简单的方法。

答案 1 :(得分:0)

它会像这样工作:https://jsfiddle.net/3xxe3Lg0/

var moments = [
'2015-10-12',
'2015-11-01',
'2015-12-20',
'2015-01-03',
'2016-01-30',
'2017-11-21',
'2010-12-20'];

var boundaries = [moment('2015-11-01').subtract(1, 'days'),moment('2016-01-03').add(1, 'days')];

for (var i in moments){
    res = moments[i] + ': ';
    if (
        moment(moments[i]).year(boundaries[0].year()).isBetween(boundaries[0], boundaries[1]) ||
        moment(moments[i]).year(boundaries[1].year()).isBetween(boundaries[0], boundaries[1])

       ){
        res += 'true';
    }
    else{
        res += 'false';
    }
    $('<div/>').text(res).appendTo($('body'));
}

编辑:如果上边界不是一个,而是比下一个边界提前两年(或更多年),那么即使微小的变化,它也会起作用。

for (var i in moments){
    res = moments[i] + ': ';
    if (
        moment(moments[i]).year(boundaries[0].year()).isBetween(boundaries[0], boundaries[1]) ||
        moment(moments[i]).year(boundaries[0].year()+1).isBetween(boundaries[0], boundaries[1])

       ){
        res += 'true';
    }
    else{
        res += 'false';
    }
    $('<div/>').text(res).appendTo($('body'));
}