Firefox与其他人之间的Javascript日期怪异

时间:2010-09-02 12:54:22

标签: 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!");  
    }
}

4 个答案:

答案 0 :(得分:5)

如果将字符串传递给Date构造函数,则字符串应采用parse方法(IETF-compliant RFC 1123 timestamps)识别的格式(来源:MDC)。其他所有内容都会导致特定于实现的行为,并且会因浏览器而异。

我建议您根本不使用字符串,并使用代表年,月和日的三个数字(请注意月份数字从0(= 1月)开始),使用一个数字,自1970年1月1日00:00:00 UTC以来的毫秒数。

更新:查看您的示例,

var a = new Date('0123');
console.log(a);

输出

Fri Jan 01 0123 01:00:00 GMT+0100 (CET)

因此Firefox显然将'0123'视为年份数字。

更新2 :我认为MDC's description of Date.parse包含您问题的答案:

  

从JavaScript 1.8.5开始,也可以解析ISO 8601格式化日期字符串的子集。

ISO 8601页面指定(“格式”部分):

  

年份:
   YYYY(例如1997年)
     年月:
   YYYY-MM(例如1997-07)
     完成日期:
   YYYY-MM-DD(例如1997-07-16)

因此,当依赖ISO 8601时,只包含四个数字的字符串将被识别为年份数字。

答案 1 :(得分:1)

不要依赖javascript中的日期验证。本地日期时间格式可能会使javascript日期对象产生一些问题。

使用以下方法

  • 显示不可编辑的文本框
  • 关于文本框显示日历的焦点
  • 进行空验证,该字段必须是必填字段
  • 无需执行日期验证,就好像文本框的值不为空,它肯定是日期。我们不允许用户输入任何其他内容,并且日历中的选定值始终为Date:)

答案 2 :(得分:1)

这适用于所有浏览器 -

  

新日期(' 2001/01/31 12:00:00 AM')

答案 3 :(得分:0)

我在firefox中遇到了与此相同的问题,由于某些原因我无法解释 任何4位数字字符都是FF中的有效日期,在其他浏览器中这是NaN:

对于FF来说有点讨厌,但这对我有用:

function isDate(sDate) {  
    if(sDate.match(/^\d{4}$/))
       return false;
    var temp = new Date(sDate);  
    if (temp.toString() == "NaN" || temp.toString() == "Invalid Date") {  
        alert("Not a Date");  
    } else {  
        alert("Is a Date!");  
        return true;  
    }
}