2013-07-10 2 views
0

У меня есть эта очень простая функция, которая не работает в Firefox или IE. Просто интересно, есть ли у вас какое-то понимание.JavaScript на IE и Firefox

function compareDates(obj, fecha){ 
    var date1 = new Date(Date.parse(obj.value.replace(/-/g, " "))); 
    var date2 = new Date(Date.parse(fecha.value.replace(/-/g, " "))); 

    if(date1 < date2){ 
     alert("Invalid Date"); 
    } 
} 

Эта функция принимает 10-JUL-13 и 20-JUL-13, для примеров.

В IE я не получаю предупреждение, в Chrome я получаю предупреждение. См. http://jsfiddle.net/ZDtVv/

+2

Это не работает нигде, так как сравнение двух разных объектов никогда не вернет true, даже если содержимое будет одинаковым. – adeneo

+0

Что вы имеете в виду, когда говорите «Не работает»? Что происходит? Подробнее см. Http://stackoverflow.com/questions/492994/compare-dates-with-javascript. – EricLaw

+0

@adeneo * Date * экземпляры можно сравнить с '<' –

ответ

1

Date.parse требует даты ISO, для которой требуется полный год. Chrome и Firefox пытаются понять это, вы не должны полагаться на это.

// This works 
compareDates({value: '10-JUL-2013'}, {value: '20-JUL-2013'}) 

См http://jsfiddle.net/ZDtVv/1/

0

Эти строки даты не являются действительными строки даты, так что вы получите Date объекты, которые имеют NaN в качестве фактической временной метки. И NaN < NaN проверяет false.

По спецификациям поведение по неверным строкам даты не определено; реализация JavaScript может превратить их в NaN или использовать любые эвристики, которые он хочет для их разбора. Например, эти даты могут быть годом 13 или 1913 годом или годом 1413, и все они будут действительными поведением для каждой спецификации.

+0

Но это работает в Chrome, вот в чем вопрос, почему? –

+1

Поскольку спецификация говорит, что вы можете в основном делать все, что хотите, с недопустимыми строками даты, а библиотека хронирования даты, которую использует Chrome, просто происходит, чтобы что-то сделать с этими конкретными строками. Нет гарантии, что он будет работать в Chrome. –