【发布时间】:2016-08-16 14:17:04
【问题描述】:
我参考了之前关于堆栈溢出的日期比较的帖子 - Compare two dates with JavaScript,但我不确定我错在哪里。请指导。
function dateValidation(){
alert("dateValidation");
var dateFlag=true;
var fromdate_1=new Date(fYear,fMonth-1,fDate);
var currentDate_1=new Date();
var todate_1=new Date(tYear,tMonth-1,tDate);
alert("fromDate"+fromdate_1);
alert("toDate"+todate_1);
alert("currentDate"+currentDate_1);
if(fDate==null||fMonth==null||fYear==null)
{
alert("null");
dateFlag=false;
fromDateFlag=false;
}
else
{
alert("else");
if(!isNaN(fromdate_1) && !isNaN(currentDate_1) && !isNaN(todate_1))
{
alert("else 2");
if(fromdate_1 > currentDate_1)
{
alert("fromDate>currentDate");
fgcFlag=false;
dateFlag=false;
}
if(todate_1 < fromdate_1)
{
alert("toDate<fromDate");
fgtFlag=false;
dateFlag=false;
}
if(fromdate_1 > currentDate_1 && todate_1 < fromdate_1)
{
alert("fromDate>currentDate && toDate< fromDate");
dateFlag=false;
tlfFlag=false;
}
if(fromdate_1 > currentDate_1 && todate_1 > fromdate_1)
{
alert("fromDate>currentDate && toDate> fromDate");
fgcFlag=false;
dateFlag=false;
}
}
}
alert("dateFlag"+dateFlag);
return dateFlag;
}
在选择 fromdate -“2016 年 8 月 1 日”和 todate -“2016 年 8 月 25 日”以及当我调用 javascript -dateValidation 时, 我按以下顺序看到警报
- 日期验证
- fromDate “2016 年 8 月 1 日”
- 至今 “2016 年 8 月 16 日”
- currentDate “2016 年 8 月 25 日”
- 否则
- 其他 2
- dateFlag 真
我观察到日期比较没有在 javascript 中进行。 我知道 dates.compare(a,b)
返回一个数字:
- -1 如果 a
- 0 如果 a = b
- 1 如果 a > b
- 如果 a 或 b 是非法日期,则为 NaN
请任何人指出我哪里出错/必须做出哪些改变?
【问题讨论】:
-
使用 1970 年之后的毫秒,
Date.getTime()来比较日期。 -
哦,好吧..所以它按预期工作
-
那么正常就不行了。 8 月 25 日,因为当前日期大于 1aug 和 8 月 16 日。但是,您如何获得 8 月 25 日,因为如果我将您的代码复制/粘贴到控制台中,我会获得 8 月 16 日 16:33
-
嗯,我猜这个逻辑似乎有缺陷。 fromDate (1 aug) 不大于 currentDate (16 aug),所以条件 1,3 和 4 不会触发。而且 toDate (25aug) 也不小于 fromDate (1 aug),所以条件 2 也不会触发。所以编辑你的逻辑以匹配你想要做的事情。
-
您可以大大简化日期验证,请参阅How to validate a date?。验证日期后,要查看“今天”是否在范围内,您只需要
fromDate <= today && today <= toDate。比较运算符将 Date 对象强制为其时间值。
标签: javascript validation date comparison