Bri*_* S. 5 javascript firefox
有没有人知道为什么在Firefox中如果您执行下面的代码,如果传入的字符串是四个数字而只有四个数字,它会将其验证为日期?在我测试的所有其他浏览器(IE,Chrome)中,它总是返回而不是日期.
正如下面的Marcel Korpel所指出的那样,该规范指出它应该回归使用Firefox特定于实现的后退我真的想知道为什么Firefox的后退显示出这种异常现象.
function isDate(sDate) {
var temp = new Date(sDate);
if (temp.toString() == "NaN" || temp.toString() == "Invalid Date") {
alert("Not a Date");
} else {
alert("Is a Date!");
}
}
Run Code Online (Sandbox Code Playgroud)
如果将字符串传递给Date构造函数,则字符串应采用parse方法识别的格式(符合IETF的RFC 1123时间戳)(源:MDC).其他所有内容都会导致实现特定的行为,并且会因浏览器而异.
我建议你根本不使用字符串,并使用代表年,月和日的三个数字(记住月数从0(= 1月)开始),或者使用一个数字,即1970年1月1日以来的毫秒数00: 00:00 UTC
更新:看到你的例子,
var a = new Date('0123');
console.log(a);
Run Code Online (Sandbox Code Playgroud)
输出
Fri Jan 01 0123 01:00:00 GMT+0100 (CET)
Run Code Online (Sandbox Code Playgroud)
所以Firefox显然认为'0123'是一年的数字.
更新2:我认为MDC的描述Date.parse包含你问题的答案:
从JavaScript 1.8.5开始,还可以解析ISO 8601格式的日期字符串的子集.
ISO 8601页面指定("格式"部分):
年份:
YYYY (eg 1997)
Year and month:
YYYY-MM(例如1997-07)
完成日期:
YYYY-MM-DD(例如1997-07-16)
因此,当依赖ISO 8601时,仅包含四个数字的字符串将被识别为年份数字.
| 归档时间: |
|
| 查看次数: |
3809 次 |
| 最近记录: |