如何比较两个Moment.js对象

6

我有一个变量,其中包含Moment.js对象的数组:

var feriados = function addFeriados(){
            feriados = [];
            ...
            feriados.push(moment("2016-01-01"));
            feriados.push(moment("2016-02-08"));
            feriados.push(moment("2016-02-09"));
            feriados.push(moment("2016-03-25"));
            feriados.push(moment("2016-04-21"));
            feriados.push(moment("2016-05-01"));
            feriados.push(moment("2016-05-26"));
            feriados.push(moment("2016-09-07"));
            feriados.push(moment("2016-10-12"));
            feriados.push(moment("2016-11-02"));
            feriados.push(moment("2016-11-15"));
            feriados.push(moment("2016-12-25"));
            ...
            return feriados;
 } 

以及一个函数来确定值是否在数组中:

function checkFeriado(data) {
    var i;
    for (i = 0; i < allFeriados.length; i++) {
        if (allFeriados[i] == data) {
        return true;
        }
    }
    return false;
}

即使我传递了一个 moment 对象,例如 checkFeriado(moment("2016-01-01")); 我仍然得到了 false。我的代码有什么问题?有更好的方法吗?

整个项目都使用了 jQuery 和 Moment.js。

2个回答

15
moment("2016-01-01") !== moment("2016-01-01"); //true
//just like
{a:1} !== {a:1}; //true

JavaScript对象不能像这样进行比较,Moment.js的对象也一样。Moment.js有自己的实现来检查日期是否相等。使用isSame方法。

moment('2010-10-20').isSame('2010-10-20'); // true
moment('2010-10-20').isSame(moment('2010-10-20')); // true
你也可以使用Array.filter来检查这个问题。
我想知道你是否指的是fearadios = allFeradios()作为函数调用?
在你的示例中,allFeradios.length听起来不正确!因为它是一个函数名,而feradios也是如此。
var feriados = function addFeriados(){
            feriados = [];
            feriados.push(moment("2016-01-01"));
            feriados.push(moment("2016-02-08"));
            feriados.push(moment("2016-02-09"));
            feriados.push(moment("2016-03-25"));
            feriados.push(moment("2016-04-21"));
            feriados.push(moment("2016-05-01"));
            feriados.push(moment("2016-05-26"));
            feriados.push(moment("2016-09-07"));
            feriados.push(moment("2016-10-12"));
            feriados.push(moment("2016-11-02"));
            feriados.push(moment("2016-11-15"));
            feriados.push(moment("2016-12-25"));
            return feriados;
 } ();
function dateInArray(queryDate){
  return Boolean(feriados.filter(function(date){
     return date.isSame(queryDate);
  }).length);
  // return feriados.some(date => date.isSame(queryDate));
}
console.log(dateInArray(moment('2016-12-25')));
console.log(dateInArray(moment('2016-12-28')));
<script src="http://momentjs.com/downloads/moment.min.js"></script>


0
我宁愿使用 .valueOf() 方法将 moment 日期对象转换为数字(timeSpan),然后再比较两个数字。
function checkFeriado(data) {
    var i;
    for (i = 0; i < allFeriados.length; i++) {
        if (allFeriados[i].valueOf() == data.value()) {
        return true;
        }
    }
    return false;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接