2

我需要检查日期是否过去。这就是我到目前为止所拥有的。JSfiddle 在这里

var date = "09/12/2013";
var d = new Date();
var month = d.getMonth() + 1;
var day = d.getDate();
var todaysDate = +(('' + day).length < 2 ? '0' : '') + day + '/' + (('' + month).length < 2 ? '0' : '') + month + '/' + d.getFullYear();

if (date < todaysDate) {
    alert("in the past");
} else {
    alert("in the future");
}

目前它说日期是过去,应该在未来。我知道我需要将字符串解析为日期,但不确定如何。

帮助?

4

3 回答 3

8

使用该输入格式,您不能使用字符串比较,因为最不重要的值在左侧。注意:我假设那个日期是 2013 年 12 月 9 日。如果你在 2013 年 9 月 12 日做美国的事情,你必须将索引调整到parts下面。

可以反转字段:

var date = "09/12/2013";
var parts = date.split('/');
date = parts[2] + "/" + parts[1] + "/" + parts[0];

...然后进行字符串比较(确保以相同的顺序构造“今天”的字符串 - 年/月/日)。

如果你打算这样做,你可以继续完成工作

var date = "09/12/2013";
var parts = date.split('/');
var date = new Date(parseInt(parts[2], 10),     // year
                    parseInt(parts[1], 10) - 1, // month, starts with 0
                    parseInt(parts[0], 10));    // day
if (date < new Date()) {
    // It's in the past, including one millisecond ago
}

...但是当然,如​​果您不希望表达式在一毫​​秒前为真,那么您的字符串方法就可以了。

于 2012-11-23T16:02:54.780 回答
0
var date = new Date("09/12/2013");
var d = new Date();
console.log(date>d); // true
var date = new Date("09/12/2011");
console.log(date>d); // false
于 2012-11-23T16:03:24.377 回答
-1

JavaScript 的本机日期比较器仅适用于日期对象,而您正在比较字符串。您应该解析date成一个Date对象,然后将其与d.

//define parse(string) --> Date
if(parse(date) < new Date()) {
  alert('past');
} else {
  alert('future');
}
于 2012-11-23T16:03:57.420 回答