【问题标题】:Date comparison not working in some browsers - Javascript日期比较在某些浏览器中不起作用 - Javascript
【发布时间】:2015-09-25 13:51:50
【问题描述】:

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

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 中失败。

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

stringToDate 是一个以指定格式格式化日期的函数。

测试用例

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

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

所以问题是,浏览器在比较 javascript 中的日期对象时是否存在差异,如果是,我应该注意哪些鲜为人知的情况?

此外,此变量在整个生命周期中仅设置一次,不会在其他任何地方更新。

【问题讨论】:

  • “在 Windows 上的 Safari 中失败” — Windows 版 Safari 多年来一直不受支持。 2012 年有超过 120 个已知的安全问题,此后一直没有发布。我会避免努力使事情顺利进行。让它死吧。 en.wikipedia.org/wiki/…
  • 存在已知的 Safari 日期支持问题:stackoverflow.com/questions/4310953/invalid-date-in-safari
  • 如果您的past 比您的today 大,它怎么可能给true
  • @smnbbrv 那是我所知道的黑暗领域。这就是我寻求帮助的原因。
  • 如果你通过 '' 比较两个对象,实际上会发生什么,即调用了对象的 valueOf 方法。对于日期 valueOf 应该返回 unixtimestamp。尝试手动执行此操作(today.getTime() > past.getTime() )以模仿此行为。如果问题仍然存在,则可能是另一个问题。

标签: javascript


【解决方案1】:

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

/*
 * 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);

【讨论】:

  • 您可以将您的函数更新为return d1_this - d2_this。同样正如 Quintin 已经建议的那样,这是 Windows 上 safari 的问题。我们已经停止了它。仍然感谢您的建议。
猜你喜欢
  • 2016-10-28
  • 2017-07-16
  • 2012-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-14
  • 1970-01-01
  • 2018-07-05
相关资源
最近更新 更多