2016-05-31 7 views
2

В моей текущей задаче я должен сравнить данную дату с текущей датой. Я должен добавить этот модуль сравнения даты в Knockout JS. Данный формат даты, как показано ниже,Сравнение даты дает неправильный результат

User.StartingDate() 
Mon Jun 08 2015 00:00:00 GMT+0530 (India Standard Time) 
    __proto__: Invalid Date 

Тогда для текущей даты, я использовал,

var dateToday = new Date(); 

Что также привело к следующему формату,

Tue May 31 2016 16:06:12 GMT+0530 (India Standard Time) 
    __proto__: Invalid Date 

Но это две вещи привели в двух разных временных обозначениях. И я просто хочу, чтобы сравнить данную дату с текущей датой, так что я попытался как,

User.StartingDate().toLocaleDateString() 
"‎06‎-‎08‎-‎2015" 
dateToday.toLocaleDateString() 
"‎05‎-‎31‎-‎2016" 

Но, сравнивая его,

User.StartingDate().toLocaleDateString() < dateToday.toLocaleDateString() 
// result is FALSE 
// but 06‎-‎08‎-‎2015 < 05‎-‎31‎-‎2016 is TRUE 

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

Любое предложение было бы полезно!

+0

Я делаю это в IE –

+1

IE версии 11.0.9600.18053 –

ответ

1

Для IE9 и выше + современных браузеров вы можете использовать toISOString. Из-за структуры такого рода струн легко сделать ====, > и < сравнения.

Для ниже IE8 вы можете использовать полипол. Примером может служить вышеупомянутая ссылка MDN.

Если вам нужно делать много времени и времени, или вам нужно поддерживать часовые пояса и т. Д., Я рекомендую включить the momentjs library.

Демо:

function ViewModel() { 
 
    var self = this; 
 
    
 
    self.date1txt = ko.observable("Mon Jun 08 2015 00:00:00 GMT+0530 (India Standard Time)"); 
 
    self.date2txt = ko.observable("Mon Jun 08 2015 00:00:00 GMT+0530 (India Standard Time)"); 
 
    
 
    self.date1 = ko.computed(() => new Date(self.date1txt())); 
 
    self.date2 = ko.computed(() => new Date(self.date2txt())); 
 
    
 
    self.isGreater = ko.computed(() => self.date1().toISOString() > self.date2().toISOString()); 
 
    self.isSmaller = ko.computed(() => self.date1().toISOString() < self.date2().toISOString()); 
 
    self.isEqual = ko.computed(() => self.date1().toISOString() === self.date2().toISOString()); 
 
} 
 

 
ko.applyBindings(new ViewModel());
pre { background: white; padding: 10px; color: #333; font: 11px consolas; border: 1px solid #ddd; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.0/knockout-min.js"></script> 
 

 
Edit date1 input in txt format: <input data-bind="textInput: date1txt"><br> 
 
Edit date2 input in txt format: <input data-bind="textInput: date2txt"><br> 
 
<hr> 
 
date1 &gt; date2 ... <strong data-bind="text: isGreater"></strong><br> 
 
date1 &lt; date2 ... <strong data-bind="text: isSmaller"></strong><br> 
 
date1 === date2 ... <strong data-bind="text: isEqual"></strong><br> 
 
<hr>Debug info: <pre data-bind="text: ko.toJSON($root, null, 2)"></pre>

+0

Это сравнение дата должна поддерживать во всех веб-браузеров в моем приложении. –

+0

Извините, но этот комментарий не имеет смысла для меня. Можете ли вы указать, какие части моего ответа о совместимости с браузером были неясны? И, возможно, и что вы имеете в виду под «всеми веб-браузерами в моем приложении»? Вы не указали * ничего * в браузерах и их версиях в своем вопросе ... – Jeroen

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