0

我有一个函数可以将日期转换为我的格式日期并将其与 CurrentDate 进行比较。当我用日期测试它时效果很好,它是 10 月的日期与今天(2013 年 10 月 16 日)相比,但如果日期是 11 月的日期,则返回值为真,这意味着日期 < 当前日期。不知道为什么,谁能给我解释一下?非常感谢。

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;
    }
4

2 回答 2

2

如果您被传递一个 Date 对象(这似乎是您得到的),那么您可以简单地执行以下操作:

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

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

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

于 2013-10-16T01:42:38.893 回答
2

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

RobG 的回答是正确的,应该被接受。


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

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

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

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

于 2013-10-16T01:37:27.533 回答