【发布时间】: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