Date.parse在FF和Chrome中的行为有所不同

时间:2015-11-17 11:57:05

标签: jquery google-chrome date mozilla

我有一个分配给文本字段的jquery datepicker。文本字段是不可编辑的,只有退格键可用于删除日期。我使用以下代码检查字段是否具有有效日期。这在mozilla中完美运行,但在chrome中不起作用。

<input type="text" class="date_field from_date" name="from_date" placeholder="From date">

//datepicker
$(".from_date").datepicker({
    dateFormat: "yy-mm-dd"
});
//only backspace keypress allowed
$(".date_field").keydown(function (e) {
    if (e.keyCode != 8) {
        e.preventDefault();
    }

});

//check the date is valid.
//For example('2015-09-' is the value of textfield)
alert(Date.parse($('.from_date').val()));
//returns NaN in mozilla,but returns number in chrome
if (Date.parse($('.from_date').val())) {
    //do the rest code
}

1 个答案:

答案 0 :(得分:1)

来自the spec

  

String可以解释为本地时间,UTC时间或某个其他时区的时间,具体取决于String的内容。该函数首先尝试根据日期时间字符串格式(20.3.1.16)中调用的规则(包括延长年份)来解析字符串的格式。 如果字符串不符合该格式,则该函数可能会回退到任何特定于实现的启发式或特定于实现的日期格式。

(我的重点)

在这种情况下,Chrome采用了一种启发式方法,即错过的一天等同于该月的第一天,因此它可以识别&#34; 2015-09 - &#34;作为九月的第一个。它也做了一些其他有趣的事情,比如看&#34; 2015-09-31&#34; 10月1日。 (这主要与JavaScript Date自动处理翻转的方式保持一致。)

如果要验证格式,必须使用不会尝试应用特定于实现的启发式方法的内容。例如:

if (dateString.test(/^\d{4}-\d{2}-\d{2}$/) {
    // It's in ####-##-## format. Still may not be valid, you can do more checking if necessary
}