Javascript 将日期字符串与jquery中的日期对象进行比较

Javascript 将日期字符串与jquery中的日期对象进行比较,javascript,jquery,date,time,Javascript,Jquery,Date,Time,我收到一个日期字符串,如下所示: 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();

我收到一个日期字符串,如下所示:

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分钟前)。我哪里出了问题

如果你发出警报(str),它会返回什么?也许它在处理返回未定义或其他内容的编码时遇到了问题。也许在创建日期之前,使用unescape会有所帮助

  • 您需要取消对字符串的scape:

    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()) { ... }
    

  • edited要将
    unescape
    更改为
    decodeURIComponent
    您不能将这样的字符串传递给
    日期
    构造函数。传递该字符串将使其返回当前日期/时间,并且由于
    date
    变量是在之后创建的,因此它有可能至少比
    str
    变量大1ms


    确保将可解析字符串传递给
    Date
    构造函数,它需要采用可由Ahh解析的格式,它表示无效的日期,因此可能这就是它不起作用的原因。日期字符串最初是由jquery创建的,所以我认为它会毫无问题地接受它。所以问题是我必须做什么才能让它接受日期字符串?我以前从未见过unescape(向您展示我对javascript的了解程度)-它在javascript/jquery中使用得很多,还是特定于日期/时间?@chrism:
    unescape
    escape
    都不推荐使用,您应该分别使用
    decodeURIComponent
    encodeURIComponent
    。它们通常用于对url字符串进行编码和解码。我在该字符串上尝试了“decodeURI”,但没有得到“+”符号,但你是对的:decodeURIComponent可以工作,它会更好。更新答案;谢谢@Andy!