【问题标题】:JavaScript From Date To Date Validation issueJavaScript 从日期到日期验证问题
【发布时间】: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 时, 我按以下顺序看到警报

  1. 日期验证
  2. fromDate “2016 年 8 月 1 日”
  3. 至今 “2016 年 8 月 16 日”
  4. currentDate “2016 年 8 月 25 日”
  5. 否则
  6. 其他 2
  7. 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 &lt;= today &amp;&amp; today &lt;= toDate。比较运算符将 Date 对象强制为其时间值。

标签: javascript validation date comparison


【解决方案1】:

你得到 dateFlag true 因为这是它被初始化的值,并且 else2 内的所有 if 测试都失败了,所以值dateFlag 没有改变。

给定:

  1. 从日期“2016 年 8 月 1 日”
  2. 截至日期“2016 年 8 月 16 日”
  3. currentDate "2016 年 8 月 25 日"

然后:

fromdate > currentDate     // false
todate   < fromdate        // false
fromdate > currentDate ... // false, second part of test isn't reached
fromdate > currentDate ... // false, second part of test isn't reached

所以代码完全按照它被告知的去做。如果您想查看 currentDate 是否介于 fromDatetoDate 之间,那么:

if (fromDate <= currentDate && currentDate <= toDate) {
  // currentDate is in range
}

一步完成。但你还没有说出你真正想要做什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 1970-01-01
    相关资源
    最近更新 更多