Разбор даты Webkit

Возможный дубликат:
Safari JS не может разобрать формат даты ГГГГ-ММ-ДД?

У меня есть простая функция для расчета количества дней между датами.

function checkDias(){
    str1 = $('#salida').val();
    str2 = $('#regreso').val();
    difference = Math.floor(( Date.parse(str2) - Date.parse(str1) ) / 86400000);
    if (diferencia > 0) { } else {
        console.log(difference); console.log(str1); console.log(str2);
       // alert the user....
    }
}

Я делаю это, чтобы убедиться, что второе свидание наступает после первого. В Firefox это работает нормально, но в Webkit (Safari или Chrome) - нет. str1 и str2 входят в консоль нормально, но разница var в Webkit возвращает NaN, а в FF возвращает значение int.

Есть идеи, почему это может быть? Я использую виджет даты jQuery UI для получения и формат YYYY-MM-DD, но я не думаю, что это имеет какое-либо отношение к этому.

Спасибо!


person Juan Ignacio    schedule 27.07.2011    source источник
comment
См .: Safari JS не может анализировать YYYY-MM- Формат даты ДД?   -  person Christian C. Salvadó    schedule 27.07.2011


Ответы (2)


На мой взгляд, метод Date.parse несовместим (фактический формат отличается в разных браузерах, версиях движка JS и т. Д.). Я привык к следующему методу для выполнения различных операций с датами в JavaScript (например, сравните):

  1. Каким-то образом получить компоненты даты (в вашем случае вы можете просто разделить строку на '-').
  2. Постройте дату, используя компоненты из предыдущего шага.
  3. Сравните временную метку дат в формате unix, используя метод getTime ().

Вот код:

var d1Parts = s1.split('-'),
    d2Parts = s2.split('-'),
    d1 = new Date(d1Parts[0], d1Parts[1]-1, d1Parts[2]),
    d2 = new Date(d2Parts[0], d2Parts[1]-1, d2Parts[2]);

if ( d1.getTime() < d2.getTime() ) {
    console.log('the first date is before the second');
}
person bjornd    schedule 27.07.2011
comment
Вам нужно вычесть 1 в части месяца при вызове конструктора Date, а не добавлять (месяцы отсчитываются от нуля). Также для сравнения отметок времени вам не нужно явно вызывать метод getTime, при сравнении if (d1 < d2) оператор < неявно преобразует два задействованных объекта в примитив. - person Christian C. Salvadó; 27.07.2011
comment
Спасибо за комментарии, Кристиан. - person bjornd; 27.07.2011

Эта небольшая функция исправляет Date.parse для Webkit и IE:

https://github.com/csnover/js-iso8601

Я протестировал его, и теперь Webkit и IE анализируют даты, как и ожидалось.

person Juan Ignacio    schedule 28.07.2011