我有一个函数可以将日期转换为我的formatdate并将其与CurrentDate进行比较。 当我测试日期是Octorber中的日期与今天(16/10/2013)相比时,它运行良好 但是如果date是11月的日期,则返回值为true,这意味着日期<当前的日期。我不知道为什么,任何人都可以向我解释一下?非常感谢。
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;
}
答案 0 :(得分:2)
编辑:当我第一次阅读您的问题时,我看到您正在使用第一天的日期,并在没有真正接受您的代码的情况下跳到我的结论。我仔细看了一下,看来我最初的结论只是一个红鲱鱼。 真正的问题是您正在处理两个日期,将它们都转换为字符串,然后尝试比较它们。这只是愚蠢 - 它只会告诉你哪个字符串首先按字母顺序。甚至更愚蠢的是,对于您手动构造字符串的日期之一,但对于另一个日期,您使用日期格式化函数。为什么不在两个日期使用日期格式化功能?
RobG's answer是正确的,应该被接受。
当我看到日期“01/11/2013”时,我将其视为2013年1月11日,而您将其视为2013年11月1日。请参阅JavaScript引擎尝试解析该日期时的困境?*
在解析JavaScript日期时,我喜欢使用年份日期,因为据我所知这些日期是明确的。每个人都将“2013/11/01”解释为2013年11月1日。包括我见过的每个JavaScript Date实现。
将日期格式更改为明确。
* 坦率地说,我很惊讶你看到了这种行为。我希望您的系统将配置为期待第一天的日期,并且JavaScript引擎将使用这些设置来正确解析日期。但是,我 感到惊讶。
答案 1 :(得分:2)
如果您正在传递一个Date对象(这似乎是您得到的),那么您可以这样做:
function isPast(date) {
return new Date() > date;
}
如果 date 不是日期对象,请先将其转换为一个。
请注意,以大写字母开头的标识符按惯例保留给构造函数。