日期比较在某些浏览器中不起作用- Javascript

Date comparison not working in some browsers - Javascript

本文关键字:不起作用 Javascript 浏览器 比较 日期      更新时间:2023-09-26

我遇到了一些不寻常的问题。

var past = utils.stringToDate(past, 'dd-mm-yyyy', '-');
var today = new Date();
past.setHours(0, 0, 0, 0);
today.setHours(0, 0, 0, 0);
return today > past? true: false;
上面的代码用来设置一个标志,这个标志用来决定用户所处的流。现在的问题是,它在包括IE在内的大多数浏览器上都能工作,但在windows上的Safari(在Safari, Mac上运行良好)和Opera上就失败了。

past是我从服务器接收到的日期,值为27-09-2015

stringToDate是将日期格式化为指定格式的函数。

测试用例

past : 27-09-2015
today: 25-09-2015

上面的代码仍然在上述浏览器中返回true

所以问题是,在比较javascript中的日期对象的浏览器是否有差异,如果是的话,我应该知道的所有不太为人所知的情况是什么?

这个变量在整个生命周期中只设置一次,不会在其他地方更新。

您可以像这样将它们添加到原型中进行比较:

/*
 * Compares two Date objects numerically.
 *
 * @param date the Date to be compared.
 * @return the value of 0 if this Date is equal to the argument date; 
 * a value of -1 if this Date is numerically less than the argument date;
 * and a value of 1 if this Date is numerically greater than the argument date.
 */
Date.prototype.compareTo = function(date) {
    var d1_this = this.getTime(),
        d2_time = date.getTime();
    if (d1_this == d2_time) {
        return 0;
    } else if (d1_this < d2_time) {
        return -1;
    } else {
        return 1;
    }
}

然后像这样使用:

var date1 = new Date(), date2 = new Date(); // init vars
date1.compareTo(date2); // or
date2.compareTo(date1);