Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在FireFox中检查Javascript中的无效日期_Javascript_Angularjs - Fatal编程技术网

如何在FireFox中检查Javascript中的无效日期

如何在FireFox中检查Javascript中的无效日期,javascript,angularjs,Javascript,Angularjs,我想测试无效日期,我编写的函数在chrome中运行良好,但在Firefox中却不行。以下是一些不适用于FF的示例: 新日期('01/99/2010')=返回有效日期 新日期('99/01/2010')=返回有效日期 变量日=01',月=99',年=2010'; 新日期(年、月、日)=返回有效日期 变量日=99',月=01',年=2010'; 新日期(年、月、日)=返回有效日期 上述方法在Chrome中返回“无效日期”,但在Firefox中不返回。有人知道在Firefox中验证日期的正确方法吗 P

我想测试无效日期,我编写的函数在chrome中运行良好,但在Firefox中却不行。以下是一些不适用于FF的示例:

  • 新日期('01/99/2010')=返回有效日期
  • 新日期('99/01/2010')=返回有效日期
  • 变量日=01',月=99',年=2010'; 新日期(年、月、日)=返回有效日期
  • 变量日=99',月=01',年=2010'; 新日期(年、月、日)=返回有效日期
  • 上述方法在Chrome中返回“无效日期”,但在Firefox中不返回。有人知道在Firefox中验证日期的正确方法吗


    PS:输入字符串可以是-mm/dd/yyyy或dd/mm/yyyy或yyyy/mm/dd

    看起来Firefox比Chrome更进一步:

    注意:其中Date被称为具有多个 参数,如果值大于其逻辑范围(例如13为 提供月值或70分钟值),相邻 值将被调整。例如,新日期(2013年13月1日)相当于 新日期(2014,1,1)都为2014-02-01创建了一个日期(注意 月份以0为基础)。与其他值类似:新日期(2013,2,1,0, 70)相当于新日期(2013,2,1,1,10),这两个日期都创建了 日期为2013-03-01T01:10:00

    来源-

    这里的重点是有多个参数的。这就是为什么Chrome会像Firefox那样:

    新日期(2010、99、1)-有效的日期对象

    但因为:

    新日期('01/99/2010')
    在技术上只是一个参数,它不符合Chrome中的上述规则,但Firefox允许它通过


    考虑到上述情况,以及不同浏览器之间的不一致性,如果您希望Firefox中的验证程序能够正常工作,那么您可能需要分别编写日期、月份和年份的验证程序,而不是尝试通过
    Date
    对象进行验证。

    Firefox似乎比Chrome更进一步:

    注意:其中Date被称为具有多个 参数,如果值大于其逻辑范围(例如13为 提供月值或70分钟值),相邻 值将被调整。例如,新日期(2013年13月1日)相当于 新日期(2014,1,1)都为2014-02-01创建了一个日期(注意 月份以0为基础)。与其他值类似:新日期(2013,2,1,0, 70)相当于新日期(2013,2,1,1,10),这两个日期都创建了 日期为2013-03-01T01:10:00

    来源-

    这里的重点是有多个参数的。这就是为什么Chrome会像Firefox那样:

    新日期(2010、99、1)-有效的日期对象

    但因为:

    新日期('01/99/2010')
    在技术上只是一个参数,它不符合Chrome中的上述规则,但Firefox允许它通过


    考虑到上述情况,以及不同浏览器之间的不一致性,如果您希望在Firefox中使用
    Date
    对象,那么您可能无法分别编写日期、月份和年份的验证程序。我会使用内部JavaScript功能验证日期,因为浏览器处理这些数据类型的方式非常不同

        function isValidDate(date)
        {
        var matches = /^(\d{2})[-\/](\d{2})[-\/](\d{4})$/.exec(date);
        if (matches == null) return false;
        var d = matches[2];
        var m = matches[1] - 1;
        var y = matches[3];
        var checkDate = new Date(y, m, d);
        return checkDate.getDate() == d &&
        checkDate.getMonth() == m &&
        checkDate.getFullYear() == y;
        }
    
    然后您可以这样使用它:

       var d = new Date(2010, 99, 1);
       console.log( isValidDate(d) ); // returns false no valid date
    

    我将使用一个内部JavaScript函数来验证日期,因为浏览器处理这些数据类型的方式非常不同

        function isValidDate(date)
        {
        var matches = /^(\d{2})[-\/](\d{2})[-\/](\d{4})$/.exec(date);
        if (matches == null) return false;
        var d = matches[2];
        var m = matches[1] - 1;
        var y = matches[3];
        var checkDate = new Date(y, m, d);
        return checkDate.getDate() == d &&
        checkDate.getMonth() == m &&
        checkDate.getFullYear() == y;
        }
    
    然后您可以这样使用它:

       var d = new Date(2010, 99, 1);
       console.log( isValidDate(d) ); // returns false no valid date
    

    你可以使用正则表达式。试试这个:

    var rgx = /^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$/;
    console.log(rgx.test("99/12/2015"));
    

    您可以使用正则表达式。试试这个:

    var rgx = /^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$/;
    console.log(rgx.test("99/12/2015"));
    

    您试过Date.parse()了吗?我试过Date.parse,它没有按预期工作你试过Date.parse()了吗?我尝试了Date.parse,它没有按预期工作这将为
    (2010/03/01)返回false
    对于
    (2010/03/01),这将返回false我试过这个日期。它起作用了。结果是真的。我把结果打印在控制台上。请在控制台上查看结果。我尝试了这个日期。它起作用了。结果是真的。我把结果打印在控制台上。请查看控制台以了解结果。