我已经传递了一个如下所示的日期字符串:
Thu%20Mar%2011%202010%2015%3A09%3A11%20GMT%2B0000%20(BST)
我想将此日期与今天的日期进行比较,并希望确定上述字符串是否已经发生。由于我对jquery / javascript的了解有限,我写了这个:
var str = new Date("Thu%20Mar%2011%202010%2015%3A09%3A11%20GMT%2B0000%20(BST)");
var date = new Date();
date.setTime(date.getTime());
if (date > str) {
alert('This date has passed');
} else {
alert('This date has NOT passed');
}
然而,这总是会返回第二个结果,即使日期字符串已经过去了(从拍摄时间开始约20分钟前)。我哪里错了
答案 0 :(得分:3)
你需要取消字符串:
var then = new Date(decodeURIComponent("Thu ... "));
没有必要像这样设置新的日期实例时间 - 这没有任何作用:
d.setTime(d.getTime());
您需要比较每个日期对象的getTime()返回的值
var then = new Date(decodeURIComponent("Thu ... "));
var now = new Date();
if (now.getTime() > then.getTime()) { ... }
已修改以将unescape
更改为decodeURIComponent
答案 1 :(得分:0)
如果你发出警报(str),它会返回什么?也许它在处理编码时遇到了麻烦,它正在返回一个未定义的东西。在创建日期之前,也许做unescape会有所帮助。
答案 2 :(得分:0)
您不能将类似的字符串传递给Date
构造函数。传递该字符串会使其返回当前日期/时间,并且由于之后创建了date
变量,因此它有可能比str
变量至少大1ms。
确保将可解析的字符串传递给Date
构造函数,它必须采用Date.parse