我尝试验证用户输入的日期。它必须是今天或更晚的日期。我怎么能这样做?
为什么以下代码中的条件为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/
答案 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.');
}
作为旁注,当您面对难以解决的日期/时间计算,操作等时,您可以使用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/