如何在FireFox中检查Javascript中的无效日期
我想测试无效日期,我编写的函数在chrome中运行良好,但在Firefox中却不行。以下是一些不适用于FF的示例:如何在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
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代码>我试过这个日期。它起作用了。结果是真的。我把结果打印在控制台上。请在控制台上查看结果。我尝试了这个日期。它起作用了。结果是真的。我把结果打印在控制台上。请查看控制台以了解结果。