JavaScript简单的日期验证

时间:2014-09-02 10:44:22

标签: javascript date

我尝试验证用户输入的日期。它必须是今天或更晚的日期。我怎么能这样做?

为什么以下代码中的条件为false

 var today = new Date();
 var idate = new Date('02/09/2014');

 if(today > idate) {
   alert('your date is big');
 }

如果我设置today那么它是今天的日期,我也会传递idate然后它也是今天的日期,那么我该如何比较日期呢?

这是JSFiddle:http://jsfiddle.net/0osh0q8a/1/

4 个答案:

答案 0 :(得分:1)

需要考虑的一些事项。

当您从Date表示创建新的string对象时,请使用YYYY-MM-DD格式进行操作。这样可以避免区域设置问题。

比较两个日期时,如果可以忽略时间,则将两者都设置为完全相同的时间。看起来就是这种情况。

最后,使用Date.parse()确保您的对象是有效日期,并且可以进行比较。

var today = new Date();
var idate = new Date('2014-09-02');
// The date entered by the user will have the same
// time from today's date object.
idate.setHours(today.getHours());
idate.setMinutes(today.getMinutes());
idate.setSeconds(today.getSeconds());
idate.setMilliseconds(today.getMilliseconds());

// Parsing the date objects.
today = Date.parse(today);
idate = Date.parse(idate);

// Comparisons.
if (idate == today) {
    alert('Date is today.');
}
else if (idate < today) {
    alert('Date in the past.');
}
else if (idate > today) {
    alert('Date in the future.');
}

Demo

作为旁注,当您面对难以解决的日期/时间计算,操作等时,您可以使用Moment.js库。这非常有用:Moment.js

答案 1 :(得分:0)

默认数据解析器在2014年2月9日正在读取您的idate,因此today大于idate

如果您将日期设置为09/04/2014,则代码​​将按预期运行

 var today = new Date();
 var idate = new Date('09/04/2014');

 console.log(today);
 >>>Tue Sep 02 2014 11:48:52 GMT+0100 (BST)
 console.log(idate);
 >>>Thu Sep 04 2014 00:00:00 GMT+0100 (BST) 

答案 2 :(得分:0)

你有两个问题。

日期文化和时间部分。

首先,new Date()使用当前浏览器的文化加上时间部分来获取当前日期。

new Date('09/04/2014')没有添加时间部分,所以它从00:00:00开始,文化再次取决于浏览器。所以它可能意味着3月9日或9月4日,取决于文化。

答案 3 :(得分:0)

请记住,new Date()包含时间部分。 如果您不关心时间,请按照以下步骤创建今天的日期:

var now = new Date();
var today = new Date(now.getFullYear(), now.getMonth(), now.getDay());

另一件事是JS日期格式是&#39; mm / dd / yyyy&#39;。所以改变你的'idate&#39;像这样:

var idate = new Date('09/02/2014');

您可以使用< and >来比较日期。但==将始终返回false,以检查2个日期是否相同:if(today.getTime() == idate.getTime()) 请参阅更新的小提琴:http://jsfiddle.net/0osh0q8a/3/