2013-06-10 7 views
0

У меня есть две даты в формате 14-May-2013 и 15-Jun-2013Сравнение дат с указанным форматом в Javascript

Как я могу сравнить эти две даты?

Это код, который у меня есть, но он не работает нормально.

if (col == 8 && m == 2) { 
    var firstValue = document.getElementById(tableID+m+""+6).innerHTML.split('-'); 
    var secondValue = document.getElementById(tableID+m+""+7).innerHTML.split('-'); 

    var firstDate=new Date(); 
    firstDate.setFullYear(firstValue[0],firstValue[1], firstValue[2]); 

    var secondDate=new Date(); 
    secondDate.setFullYear(secondValue[0],secondValue[1], secondValue[2]);  

    if (firstDate < secondDate) 
    { 
     alert("First Date is less than Second Date"); 
    } 
    else 
    { 
     alert("Second Date is less than First Date"); 
    } 
} 

Что я делаю неправильно и как мне заставить его работать правильно?

Спасибо!

+0

Почему бы вам не преобразовать эти даты в миллисекунды? – reporter

ответ

1

Изменения в этой

if(firstDate.getTime() < secondDate.getTime()){ 
    //do something 
} else { 
    //do something else 
} 

Значение, возвращаемое методом GetTime это число миллисекунд с 1 января 1970 00:00:00 UTC

Таким образом, вы в основном сравниваете два представления в миллисекундах даты. Формат

+0

Почему? Оператор '<' сравнения уже преобразовывает их в числа. – Bergi

1

Когда я сравниваю два, я преобразую время во время Unix. Результаты намного надежнее. В javascript это будет функция getTime().

Итак, для вас firstDate.getTime() < secondDate.getTime().

http://www.tutorialspoint.com/javascript/date_gettime.htm

+0

Почему? Оператор '<' сравнения уже преобразовывает их в числа. – Bergi

+0

Если вы не используете unix-время, его просто сложнее/больше работать, чтобы сравнить две даты. Является ли май (05), 31-е больше или меньше июня (06), 20-го? Javascript может сказать, что 20 меньше 31, или может сказать, что 05 меньше, чем 06. Это потребует более подробной функции. Его гораздо проще работать с датами, которые являются только одной числовой константой (в отличие от дат, которые 3 или более, как 10 июня 2013 года). – JonnyS

+0

Зачем вам привязывать объекты даты к 'May (05), 31st' (если вы уже их разобрали)? Я сказал, что оператор '<' неявно преобразует объекты в метки времени unix (ms) перед их сопоставлением - и вам не нужно вызывать 'getTime()'. – Bergi

2

14-May-2013 и 15-Jun-2013

firstDate.setFullYear(firstValue[0],firstValue[1], firstValue[2]); 

Что я делаю неправильно?

setFullYear не требует имен месяцев или сокращений. Вам нужно будет проанализировать формат даты, чтобы сначала получить номер месяца.

function parse(str) { 
    var vals = str.split('-'); 
    return new Date(
     +vals[0], 
     ["jan","feb","mar","apr","may","jun","jul","aug","sep", 
     "oct","nov","dez"].indexOf(vals[1].toLowerCase()), 
     +vals[2] 
    ); 
} 
var firstDate = parse(document.getElementById(tableID+m+""+6).innerHTML) 
var secondDate = parse(document.getElementById(tableID+m+""+7).innerHTML); 
if (firstDate < secondDate) { 
    alert("First Date is less than Second Date"); 
} else { 
    alert("Second Date is less than or equal to First Date"); 
} 
Смежные вопросы