【问题标题】:Compare DateTime by Javascript, Jquery通过 Javascript、Jquery 比较 DateTime
【发布时间】:2013-10-16 10:28:17
【问题描述】:

我有一个函数可以将日期转换为我的格式日期并将其与 CurrentDate 进行比较。 当我用日期测试它时效果很好,日期是 10 月的日期,与今天相比(16/10/2013) 但如果 date 是 11 月的日期,则返回值为 true,即 date

function IsPast(date) {
        var fullDate = new Date();
        var twoDigitMonth = fullDate.getMonth() + 1 + "";
        if (twoDigitMonth.length == 1) twoDigitMonth = "0" + twoDigitMonth;
        var twoDigitDate = fullDate.getDate() + "";
        if (twoDigitDate.length == 1) twoDigitDate = "0" + twoDigitDate;
        var currentDate = twoDigitDate + "/" + twoDigitMonth + "/" + fullDate.getFullYear();
        var startDate = $.fullCalendar.formatDate(date, 'dd/MM/yyyy');

        if (startDate <= currentDate) {return true;}
        return false;
    }

【问题讨论】:

  • 请问您输入dateIsPast(10/10/2010) 的格式是什么?
  • 这是 Jquery 的 FullCalendar 格式。我在格式化 startDate 和 currentDate 01/11/2013 和 16/10/2013 后检查了值,但它返回 true :v

标签: c# javascript jquery datetime


【解决方案1】:

如果你被传递了一个 Date 对象(这似乎就是你得到的),那么你可以简单地做:

function isPast(date) {
  return new Date() > date;
}

如果 date 不是日期对象,请先将其转换为一个。

请注意,按照惯例,以大写字母开头的标识符是为构造函数保留的。

【讨论】:

    【解决方案2】:

    编辑:当我第一次阅读您的问题时,我看到您使用的是第一次约会,并在没有真正考虑您的代码的情况下跳到我的结论。我仔细看了看,似乎我最初的结论只是一个红鲱鱼。 真正的问题是您正在获取两个日期,将它们都转换为字符串,然后尝试比较它们。这太傻了——它只会告诉你哪个字符串在前按字母顺序。更愚蠢的是,对于您手动构建字符串的日期之一,对于另一个日期,您使用日期格式化函数。为什么不直接对两个日期都使用日期格式化功能?

    RobG's answer 是正确的,应该被接受。


    当我看到日期“01/11/2013”​​时,我将其读取为 2013 年 1 月 11 日,而您将其读取为 2013 年 11 月 1 日。请查看 JavaScript 引擎在尝试解析该日期时所处的困境?*

    在解析 JavaScript 日期时,我喜欢使用年份的第一个日期,因为据我所知这些是明确的。每个人都将“2013/11/01”解释为 2013 年 11 月 1 日。包括我见过的每个 JavaScript Date 实现。

    将日期格式更改为明确的。

    *坦率地说,我很惊讶你会看到这种行为。我希望您的系统将被配置为预期第一个日期,并且 JavaScript 引擎将使用这些设置来正确解析日期。但是,我并不那么感到惊讶。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-26
      • 2011-01-11
      • 2016-11-01
      • 1970-01-01
      • 2014-08-20
      • 2011-09-30
      • 1970-01-01
      相关资源
      最近更新 更多