2016-12-20 4 views
2

Я пытаюсь сравнить две даты, например, сегодняшнюю дату (20/12/2016) с датой со следующего года (01/01/2017). Код работает нормально, если RenewalDate для этого года, например 22/12/2016. Это только кажется, если дата на следующий год, что он не признает, что сегодня не больше, чем эта датаСравнение двух дат с разными годами

var RenewalDate = new Date(result.RenewalDate); 
var month = RenewalDate.getMonth()+1; 
var year = RenewalDate.getFullYear(); 
if(day<10){ 
    day='0'+day 
} 
if(month<10){ 
    month='0'+month 
} 
var RenewalDate = day+'/'+month+'/'+year; 
var today = new Date(); 
var dd = today.getDate(); 
var mm = today.getMonth()+1; //January is 0 

var yyyy = today.getFullYear(); 
if(dd<10){ 
     dd='0'+dd 
} 
if(mm<10){ 
     mm='0'+mm 
} 
var today = dd+'/'+mm+'/'+yyyy; 
if(today > RenewalDate) 
{ 
    alert("Date is greater than today"); 
} 
else 
{ 
    alert("Date is less than today"); 
} 
+0

Почему вы не создаете объект даты из этих двух дат? – rahulsm

+0

просто создайте два объекта даты. 'new Date()' и 'new Date ('1/1/2017')' и сравните с условием if –

+0

Сравнение dd/mm/yyyy как строки также потерпит неудачу, если этот день будет позже, например, 01/12/2016 до 02/01/2016. Если вы не хотите создавать 'Date', тогда форматируйте свои строки даты в формате ansi, то есть:' var today = yyyy + mm + dd' и сравните. –

ответ

3

Не преобразовывать дату в строку для сравнения, как вы делали так как он будет сравнивать string вместо сравнения date. Если бы вы это сделали, то даже он будет обрабатывать 22/11/2016 больше, чем 20/12/2016 в том же году.

Вы можете просто использовать либо today > renewalDate или today.getTime() > renewalDate.getTime(), как показано ниже,

Метод 1:

var renewalDate = new Date(2017, 0, 1); 
 
var today = new Date(); 
 

 
if(today > renewalDate) 
 
{ 
 
    alert("Date is greater than today"); 
 
} 
 
else 
 
{ 
 
    alert("Date is less than today"); 
 
}

Метод 2:

var renewalDate = new Date(2017, 0, 1); 
 
    var today = new Date(); 
 

 
    if(today.getTime() > renewalDate.getTime()) 
 
    { 
 
     alert("Date is greater than today"); 
 
    } 
 
    else 
 
    { 
 
     alert("Date is less than today"); 
 
    }

Примечание: Метод 1 и метод 2 будет делать то же самое.

0

Почему вы не используете moment.js?

moment('2016-12-20').isAfter('2016-01-02', 'year'); // false 
moment('2016-12-20').isAfter('2015-12-31', 'year'); // true 
+0

OP не набрал момент ответа или добавил тег. Библиотеке действительно не нужно использовать оператор равенства. ;-) – RobG

1

Вот пример кода, а не то, что вы делаете,

var to = new Date(2016,12,12); 
var from = new Date(2017,12,12); 
if(to > from){ 
alert('to is greater than from'); 
}else{ 
    alert('to is less than from'); 
} 

Я надеюсь, что этот пример кода будет работать ваше требование

-1

Технически вы сравниваете строки не даты, сравниваете любые два объекта даты, вы получите правильные результаты или преобразуете их в timestamps date.getTime() (это длинное число), а затем сравните, вы получите правильные результаты.

+0

Строка даты * есть * [* timestamp *] (https://en.wikipedia.org/wiki/Timestamp). ;-) – RobG

+0

Но сравнение строк различно. –

+0

В случае сравнения строк '31/01/2000' больше, чем' 01/01/2016'. –

Смежные вопросы