0

在我的 JavaScript 代码中,我必须使用带有日期时间值的变量(x 和 y)。以下所有语句都返回 false:

  • x < y -> 假
  • x > y -> 假
  • x == y -> 假
  • x === y -> 假

当我调试代码时,x 和 y 具有相同的值 'Sat Jan 1 12:00:00 UTC+0100 2011' 和相同的类型。

我正在使用 IE9。

是否有不同的方法来检查两个日期时间值是否相等?

更新(代码) - 我试图提取一些相关部分,整个项目非常大:

var data;


//Dates are loaded from a webservice and returned as strings; they are parsed with the following function


data = parseD(getDataFromService());

function parseD (data) {
    for (var i = 0; i < data.length; i++) {
        var d = data[i];
        for (var key in d) {
            if (d[key] && d[key].toString().substring(0, 6) === "/Date\(")
                d[key] = new Date(parseInt(d[key].toString().substr(6)));
        }
    }
    return data;
};

function getCssForCell(row, columnID, dataContext, value) {
            var css = "";
            if (columnID === "VF" && value) {
                if (row > 0) {
                    if (data[row].VF < addDays(data[row - 1].VF, 2)) {
                        css = "error_cell";
                    }
                }
            }
            if (columnID === "VU" || columnID === "VF") {
                if (dataContext.VF && dataContext.VU) {
                    if (dataContext.VU <= dataContext.VF) {
                        css = "error_cell";
                    }
                }
            }
            if (columnID === "Rate" && row < (strict_mode ? data.length - 1 : data.length - 2)) { //value for Rate must be assigned
                if (value === undefined || value === null) {
                    css = "error_cell";
                }
            }
            if (columnID === "VF" && row < (strict_mode ? data.length - 1 : data.length - 2)) {
                if (value === undefined || value === null) {
                    css = "error_cell";
                }
            }

            if (columnID === "Rate" && value < 0) {
                css = "error_cell";
            }

            //PROBLEM IN NEXT LINE
            if (columnID === "VU" && row < data.length - 1 && dataContext.VU && data[row + 1] && addDays(dataContext.VU, 1) != data[row + 1].VF ) {
                css = "error_cell";
            }

            return css;
        }

function addDays(date, days) {
    if (date) {
        var result = new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours());
        result.setDate(result.getDate() + days);
        return result;
    }
    return date;
}
4

1 回答 1

1

您不应该比较 Date 对象实例,而是使用.getTime()方法比较它们的值:

x.getTime() < y.getTime();
x.getTime() > y.getTime();
x.getTime() == y.getTime();
x.getTime() === y.getTime();

.getTime()根据世界时返回指定日期的时间对应的数值,该值是自 1970 年 1 月 1 日 00:00:00 UTC 以来的毫秒数,也相当于.valueOf()method.

于 2012-08-04T15:31:12.527 回答