【问题标题】:comparing a date string to a date object in jquery将日期字符串与 jquery 中的日期对象进行比较
【发布时间】:2010-03-11 15:29:27
【问题描述】:

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

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 分钟前的时间)。我哪里错了

【问题讨论】:

    标签: javascript jquery date time


    【解决方案1】:
    1. 你需要取消转义字符串:

      var then = new Date(decodeURIComponent("Thu ... "));
      
    2. 没有必要像那样设置新日期实例的时间 - 这什么都不做:

      d.setTime(d.getTime());
      
    3. 您需要比较 getTime() 为每个日期对象返回的值

      var then = new Date(decodeURIComponent("Thu ... "));
      var now = new Date();
      if (now.getTime() > then.getTime()) { ... }
      

    编辑unescape改为decodeURIComponent

    【讨论】:

    • 我以前从未见过 unescape(向您展示我对 javascript 的了解程度)——它是在 javascript/jquery 中大量使用,还是特定于日期/时间?
    • @chrism: unescapeescape 已弃用,您应该分别使用 decodeURIComponentencodeURIComponent。它们通常用于编码和解码 url 字符串。
    • 我在那个字符串上尝试了“decodeURI”,但没有得到“+”号,但你是对的:decodeURIComponent 可以工作,而且会更好。更新答案;谢谢@Andy!
    【解决方案2】:

    如果你执行 alert(str),它会返回什么?也许它在处理返回未定义或其他东西的编码时遇到了麻烦。也许在创建日期之前执行 unescape 会有所帮助。

    【讨论】:

    • 啊,它说日期无效,所以也许这就是它不起作用的原因。日期字符串最初是由 jquery 创建的,所以我认为它会毫无问题地接受它。所以问题是我该怎么做才能让它接受日期字符串?
    【解决方案3】:

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

    确保将可解析的字符串传递给Date 构造函数,它需要采用Date.parse 可解析的格式

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-23
      • 1970-01-01
      • 2015-11-24
      • 2021-03-27
      相关资源
      最近更新 更多